[프로그래머스] Lv1 - 숫자 문자열과 영단어

김멉덥·2023년 7월 17일
0

알고리즘 공부

목록 보기
35/171
post-thumbnail
post-custom-banner

문제

프로그래머스 2021 카카오 채용연계형 인턴십


코드 구현

def solution(s):
    ans = ''
    str_num = ''

    num_dict = {
        'zero': '0',
        'one': '1',
        'two': '2',
        'three': '3',
        'four': '4',
        'five': '5',
        'six': '6',
        'seven': '7',
        'eight': '8',
        'nine': '9'
    }
    for num in s:
        if (num.isdigit()):     # 숫자면 그냥 추가
            ans += num
        else:       # 숫자가 아니면 -> 영단어 -> 무슨 숫자의 영단어인지 찾기
            str_num += num
            # 사전 안에 없는 영단어라면 아직 글자가 덜 들어온 것 (get 했을 때 None이 나오게됨)
            if (num_dict.get(str_num) != None):         # None이 아니라면 영단어를 찾을 수 있게됨
                ans += num_dict.get(str_num)            # 영단어로 찾은 숫자 추가
                str_num = ''                    # 다음 영단어 완성을 위해 초기화

    return int(ans)     # 모인 숫자를 str로 붙여줬으니 최종적으로는 int 형식으로 리턴

if __name__ == '__main__':
    print(solution("one4seveneight"	))
    print(solution("23four5six7"))
    print(solution("2three45sixseven"))
    print(solution("123"))

풀이

  • 숫자인지 아닌지 확인 → 숫자면 그냥 추가
  • 숫자가 아니면 영단어임 → 무슨 영단어인지 알아내야함 (for문으로 알파벳 하나씩 보고있기 때문에 영단어를 완성해야함) → 알파벳을 하나씩 넣다가 사전 안에 있는 영단어와 일치하면 == 영단어가 완성된 것 ! (None 이 아닐 때) → 무슨 숫자인지 구해서 추가
  • str로 계속 붙였으니 다 하고 나서는 int로 변환해서 리턴

What I learned

replace가 생각보다 여러곳에서 유용하게 쓰이는 것 같다 . . .

def solution(s):
    words = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']

    for i in range(len(words)):
        s = s.replace(words[i], str(i))

    return int(s)
profile
데굴데굴 뚝딱뚝딱 개발기록
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 7월 17일

잘 봤습니다. 좋은 글 감사합니다.

답글 달기