https://school.programmers.co.kr/learn/courses/30/lessons/81301
2021 카카오 채용연계형 인턴십
def solution(s):
answer = ''
number = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
i = 0
while len(s) > 0:
if s[:i] in number:
answer += str(number.index(s[:i]))
s = s[i:]
i = -1
try:
answer += str(int(s[0]))
s = s[1:]
i = -1
except:
pass
finally:
i += 1
return int(answer)
다른 사람들 코드 보니까 대부분 replace()
를 사용했던데
나는 좀 특이하게 푼 것 같다.
finally는 예외 발생 여부에 상관없이 작동하는 코드를 넣음
s를 앞에서부터 자릿수를 늘려가면서 탐색하다가 영단어나 숫자를 발견하면 answer에 넣고 슬라이싱해서 앞으로 당기는 방식으로 구현했음
앞으로 당기다가 s가 '' 되면 (len(s) == 0)
while문을 끝내도록 설정
영단어를 발견하면 if문 작동
-> 슬라이싱 후 i = -1
로 초기화 후 i += 1
해서 i = 0
숫자를 발견하면 try문 작동
-> 슬라이싱 후 i = -1
로 초기화 후 i += 1
해서 i = 0
둘 다 발견 못하면 i += 1
만 하고 종료
타인 코드 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)
타인 코드 2
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)
근데 replace()
자체가 시간 복잡도가 높은 편이라고 함
주어진 테스트 케이스에서는 타인 코드가 더 빠른 듯..
while문이 시간을 많이 잡아 먹나?