Programming/Algorithm

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

100winone 2021. 10. 21. 00:40

문제 (LV.1)

https://programmers.co.kr/learn/courses/30/lessons/81301

 

코드

def solution(s):
    answer = ''
    num = {"zero" : '0', "one" : '1', "two" : '2', "three" : '3'
         , "four" : '4', "five" : '5', "six" : '6', "seven" : '7'
         , "eight" : '8', "nine" : '9' }
    tmp_words = ""
    for i in s:
        if i.isdigit():
            answer += i
            continue
        tmp_words += i
        if tmp_words in num.keys():      # dictionary key 안에 단어가 존재한다면
            answer += num.get(tmp_words)
            # num[tmp_words]
            tmp_words = ""

    return int(answer) # int형으로 변환

해설

 

파라미터로 주어지는 문자열이 for 문을 돌 때, 숫자라면 answer에 값을 더해준다.

문자라면 각각에 단어를 임시 리스트에 넣어주고 그 임시 리스트가 딕셔너리키에 존재할 때, answer에 넣어주고 다시 임시 리스트를 초기화 한다.

 

좀 더 깔끔한 방법이 없나 찾아보다가 아래와 같은 방식으로 푸신 분의 코드를 보았다.

num.items()를 사용하여 딕셔너리에 모든 아이템을 불러와 존재한다면 i[0]인 key는 i[1]인 value로 변경해준다.

    for i in num.items(): # item은 key-value 리스트로 구성
        s = s.replace(i[0], i[1])

 

아직 파이썬이 익숙하지 않지만, 파이썬의 장점인 간결함을 살릴 수 있는 코드를 많이 짜려고 노력해야겠다.