Sign In
TIL 웹개발

TIL 웹개발 - 사고의 전환

서경태
프로그래머스 '숫자 문자열과 영단어' 문제를 풀다보니 문제를 해결하는 방식은 주어진대로 하는 것이 아님을 느꼈다.
문제의 내용은 s가 "one4seveneight" 이런식으로 주어지는데 숫자로 올바르게 변환하는 함수를 만드는 것이다.
"one4seveneight" -> 1478 "23four5six7" -> 234567 "1zerotwozero3" -> 10203
먼저 나는 문제를 풀기 위해 영단어와 숫자가 일치하는 딕셔너리를 만들었다. 하지만 코드를 적다보니 딕셔너리를 사용하지도 않고 굉장히 단순하고 무식한 방법으로 풀었다.
def solution(s): answer = [] for i in range(len(s)): if s[i].isdigit(): answer.append((s[i])) elif s[i] == 'z': if i + 1 >= len(s): break if s[i+1] == 'e': answer.append('0') elif s[i] == 'o': if i + 1 >= len(s): break if s[i + 1] == 'n': answer.append('1') elif s[i] == 't': if i + 1 >= len(s): break if s[i+1] == 'w': answer.append('2') elif s[i+1] == 'h': answer.append('3') elif s[i] == 'f': if i + 1 >= len(s): break if s[i+1] == 'o': answer.append('4') elif s[i+1] == 'i': answer.append('5') elif s[i] == 's': if i + 1 >= len(s): break if s[i+1] == 'i': answer.append('6') elif s[i+1] == 'e': answer.append('7') elif s[i] == 'e': if i + 1 >= len(s): break if s[i + 1] == 'i': answer.append('8') elif s[i] == 'n': if i + 1 >= len(s): break if s[i + 1] == 'i': answer.append('9') return int(''.join(list(map(str, answer))))
문자열 s를 하나씩 풀어서 일치하는 조건의 값을 숫자로 돌려주는 함수다.
다른 사람의 문제 풀이를 보니 순서를 바꿔서 푸는 방법도 있었다.
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)
내가 처음 생각했던 것도 딕셔너리로 만들어 s의 일부값이 딕셔너리 키값에 들어있다면 해당 숫자를 반환하는 식이었는데 이 코드는 아예 딕셔너리부터 시작해서 s에 해당하는 값을 찾았다. 그리고 answer를 문자열 그대로 사용해 replace로 키값과 밸류를 치환했다.
내가 항상 리스틀 만들고 그걸 다시 해답에 맞게 조합하거나 조작해서 출력하는 경우가 많은데 시간복잡도면에서 리스트를 사용하지 않는게 더 좋으니 앞으로 다른 방법도 고민해야한다.
딕셔너리의 특성도 잘 알고 있어야 한다.
반복문에서 num_dict.items()는 키-값 쌍을 반환한다. 그래서 key, value를 동시에 추출하는 것도 가능하다.
만약 key만 뽑거나 value만 뽑을때는 .keys / .values 라고 적어줘야 한다.
Subscribe to 'kyugntae-ai'
Subscribe to my site to be the first to receive notifications and emails about the latest updates, including new posts.
Join Slashpage and subscribe to 'kyugntae-ai'!
Subscribe
👍