본문으로 바로가기
728x90
반응형
 

Description

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.

1478 → "one4seveneight"
234567 → "23four5six7"
10203 → "1zerotwozero3"


이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.

 

 

Notes

알고리즘 문제는 문제를 이해하는 과정도 힘들다. 어찌어찌 이해를 하고 보니 문제 풀이 계획을 다음과 같이 세웠다.

1. number_dict 라는 dictionary를 생성해 문제에서 제시하는 `숫자`, `영단어` 쌍의 변수를 선언한다.

2. 매개변수로 받아준 값에서 numbers_dict에 있는 key가 존재하면 이를 replace로 처리한다.

 

하지만 순전히 int로 변환 가능한 문자열이 들어오면 ValueError가 날것이고 이 부분을 except 태워서 처리 해도 되나라는 생각이 들긴했다. try ~except를 if ~else처럼 쓰는 것 같아 다소 마음에 드는 방법이 아니지만 뾰족한 수가 없으므로 일단 처리하고 봤다.

number_dict = {
    'zero':'0',
    'one': '1',
    'two': '2',
    'three': '3',
    'four': '4',
    'five': '5',
    'six': '6',
    'seven': '7',
    'eight': '8',
    'nine': '9'
}

def solution(s):
    answer = s
    
    if len(answer) > 50:
        return False
    
    try:
        return int(answer)
    except ValueError:
        pass

    for key in number_dict.keys():
        if key in answer:
            answer = answer.replace(key, number_dict[key])

    return int(answer)

except 문 안에 로직을 넣는다는 것이 마음에 걸려 결국엔 ValueError가 나면 pass 시켜버렸다. 추가로 CASE 7,8,9 에서 테스트 실패가 뜨길래 Member-Ship 연산자에 대한 문제인가 하면서 다시 살펴봤는데 문제에서 제시하는 숫자 0이 들어올 수 있다는 조건을 빠트리고 number_dict를 작성했었다. 문제를 잘 읽어보고 풀기로 하자.

728x90
반응형