https://programmers.co.kr/learn/courses/30/lessons/81301?language=python3
"one4seveneight" -> 1478
위 처럼 문자와 숫자로 이루어진 문자열을 모두 숫자로 바꾸는 문제.
나는 아래처럼 문자를 하나씩 판별하며 알파벳은 temp 문자열에 집어 넣고, 숫자이면 그대로 answer 문자열에 넣었다.
반복을 하면서 temp의 문자열이 dictionary에 포함된 문자이면 value 값인 숫자로 변경하고 temp를 초기화 했다.
def solution(s): st_answer = '' num_dict = {"zero" : "0", "one" : "1", "two" : "2", "three" : "3", "four" : "4", "five" : "5", "six" : "6", "seven" : "7", "eight" : "8", "nine" : "9", "ten" : "10"} temp = '' for st in s: stOrd = ord(st) # 아스키코드로 변환 if 48 <= stOrd <= 57: # 0 ~ 9 까지 숫자 st_answer += st else: temp += st if temp in num_dict: st_answer += num_dict[temp] temp = '' return int(st_answer)
시간초과 없이 정답을 맞추긴 했지만 문자를 하나하나 판별한다는 게 효율적인가 라는 생각이 들었다.
replace(a, b) 함수를 사용하면 문자를 하나 하나 확인할 필요 없이 문자열에 a가 포함돼있으면 b로 변경해준다. 정말 편리한 함수이다. 이 함수를 사용하면 아래와 같이 코드 길이가 굉장히 짧아진다.
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)