프로그래머스_숫자 문자열과 영단어

임정민·2023년 10월 26일
0

알고리즘 문제풀이

목록 보기
119/173
post-thumbnail

프로그래머스 Lv1 문제입니다. 실전에 대비하기 위해 30분 시간제한을 두고 풀었습니다.

문제

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

[나의 풀이]

⌛ 7분 소요


from collections import deque

def solution(s):
    
    answer = ''
    
    s = deque(s)
    words = ['zero','one','two','three','four','five','six','seven','eight','nine']
    word_dict = {word:idx for idx,word in enumerate(words)}
    word = ''
    
    while s:
        
        x = s.popleft()
        
        if x.isdecimal():
            answer += str(x)
        else:
            word += x
        
        if word in word_dict.keys():
            answer += str(word_dict[word]) 
            word = ''
    
    return int(answer)

숫자와 문자열로 이루어진 문자열 "one4seveneight" 등 을 1478과 같은 숫자로 변환하는 문제입니다.

Queue 구조를 활용하여 구현하였고 popleft()하며 숫자 혹은 단어일 때를 구분하여 해결하였습니다.🐱🐱🐱

[다른 사람의 풀이1]


num_dic = {"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
    for key, value in num_dic.items():
        answer = answer.replace(key, value)
    return int(answer)

가장 간결하게 구현한 풀이입니다. 파싱할 수 있는 dict를 구성한 후 "zero", "one", "two" 등의 문자열을 확인하며 숫자로 replace해주는 방식입니다.

[다른 사람의 풀이2]


def solution(s):

    eng = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']

    if s.isdigit():
        return int(s) # 바로리턴 

    # 숫자면 넘어가고 문자열이라면 다음 숫자가 나올때까지 단어를 완성한다. 
    # 문자열이 이어져있을수도 있으므로 한단어씩 문자열에 합칠때마다 eng배열에 존재하는지 확인하고 있으면 temp를 빈문자열로 초기화시킨다.

    answer = ''
    temp = ''
    for i in s:
        if i.isdigit():
            answer+=i
        # 문자열이면 
        else:
            temp += i
            if temp in eng:
                answer += str(eng.index(temp))
                temp = ''

    #print(answer)   
    return int(answer)

'나의 풀이'와 유사한 방식입니다. 다른점으로 '나의 풀이'에서는 s의 요소가 숫자임을 판단하기 위해 isdecimal() 함수를, 위 풀이에서는 isdigit()함수를 사용했다는 점입니다.🐬🐬🐬

감사합니다.

profile
https://github.com/min731

0개의 댓글