프로그래머스 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()함수를 사용했다는 점입니다.🐬🐬🐬
감사합니다.