Dia Egg - Shugo Chara

Python공부/프로그래머스

(Python) 숫자문자열과 영단어 (프로그래머스 Lv.1)/ replace()

별ㅇI 2023. 6. 16. 03:37
728x90
반응형

숫자문자열과 영단어 (프로그래머스 Lv.1)

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

내 코드

def solution(s):
    answer = ''
    alpha = ['zero','one','two','three','four','five','six','seven','eight','nine']
    i = 0
    while(i<len(s)):
        if list(s)[i].isalpha() == False:
            answer += str(list(s)[i])
            i += 1
        else:
            for j, alp in enumerate(alpha):
                if list(alp)[0] == list(s)[i] and list(alp)[1] == list(s)[i+1]:
                    answer += str(j)
                    i += len(alp)
                    break
        
    answer = int(answer)                
    return answer

마지막 for 문에 break를 안써서 자꾸 nine까지 넘어가는 바람에 계속 리스트를 넘어섰다는 오류(IndexError: list index out of range)가 계속 떠서 애를 먹었다. 찾는 조건을 만족하면 break를 쓰는 습관을 들여야 겠다.

 

[베스트 코드 리뷰]

나는 첫째 자리와 둘째 자리를 모두 비교해보는 방법을 썼지만, 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)

 혹은 동일하게 replace함수를 이용하나 딕셔너리를 같이 이용하는 방법이 있다.

def solution(s):
	num_dic = {"zero":"0", "one":"1", "two":"2", "three":"3", "four":"4", "five":"5", "six":"6", "seven":"7", "eight":"8", "nine":"9"}
	answer = s
	for key, value in num_dic.items():
		answer = answer.replace(key, value)
	return int(answer)

 

728x90
반응형