[프로그래머스][Lv.1] 숫자 문자열과 영단어
문제
https://school.programmers.co.kr/learn/courses/30/lessons/81301
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내 풀이
def solution(s):
answer = ''
numbers = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
word = ''
for e in s:
if e.isdigit():
answer += str(e)
continue
word += e
if word in numbers:
answer += str(numbers.index(word))
word = ''
return int(answer)
과거의 나였으면 저 number list를 dictionary로 구현했을 것이다. ex) {'zero': 0, 'one': 1, ...}
마찬가지로 비슷한 문제의 다른 풀이 방법에서 본걸 기억해내 써먹었다.
- isdigit()
- if - in 문
- list.index(x)
이 세가지 방법도 마찬가지로 어디선가 봤던걸 활용해낸건데 아주 잘 써먹혔다.
역시 꾸준히 문제를 푸니까 이쪽으로 머리가 잘 굴러가는 것 같다.
하지만 착각은 하지말자 겨우 레벨1에 정답률도 67%나 되는 쉬운 문제다.
다른 풀이
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를 활용하는 방법을 생각하지 못했는데
이 문제를 보다가 저렇게 range(len(words))로 index만 구해 쓰는거보다 enumerate를 하는게 더 낫지 않나 라는 생각이 들었다.
그래서 내가 직접 다시 풀어보았다.
내 풀이+
def solution(s):
numbers = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
for i, v in enumerate(numbers):
s = s.replace(v, str(i))
return int(s)
훨씬 깔끔해졌다.
문득 가독성이 좋아진것과 별개로 성능에서도 차이가 있는지 궁금해졌는데
직접 실험을 통해 한 번 알아봤다. - [enumerate(list)와 range(len(list)) 비교]
enumerate(list)와 range(len(list)) 비교 - 작성중
개요 number = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'] 위 list에 대해 for문을 돌려 각각의 index와 value를 얻어내는걸 한다면 enumerate(number)와 range(len(number)) 중 어떤게 더 효율이
4sii.tistory.com
예전에 풀었던 경험이 점점 밑거름이 되어 다음 문제를 풀 때 계속 도움을 주는
선순환이 반복되고 있는데 이 흐름을 멈추지말고 아직도 많이 남은 Lv.0 ~ Lv.1 문제를 빨리 다 풀고
Lv.2를 향해 나아가야겠다.