문제 설명
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
- 1478 → “one4seveneight”
- 234567 → “23four5six7”
- 10203 → “1zerotwozero3”
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s
가 매개변수로 주어집니다. s
가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.
숫자 | 영단어 |
---|---|
0 | zero |
1 | one |
2 | two |
3 | three |
4 | four |
5 | five |
6 | six |
7 | seven |
8 | eight |
9 | nine |
제한사항
- 1 ≤
s
의 길이 ≤ 50 s
가 “zero” 또는 “0”으로 시작하는 경우는 주어지지 않습니다.- return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만
s
로 주어집니다.
풀이
이번에도 1번 문제는 어김없이 문자열
문제로 시작했다. 문제 자체가 워낙 단순하기 때문에 알고리즘이나 풀이법을 떠올리기보단 최대한 빨리 정확하게 구현
해내는 것이 관건이었다. 이런 문제를 풀 때 한가지 주의해야 할 것은 다음과 같다.
괜히 코드를 최대한 깔끔하게 작성하려고 하다가 오답이 나오거나 시간이 지체될 수 있다.
이러한 문제의 특징은 코드가 결국 더러워질 수 밖에 없다는 것이다. 수많은 if
문과 더불어 상당히 많은 양의 코드가 중복
될 수 있다. 이것을 참지 못하고 문제를 품과 동시에 코드 설계까지 생각하려는 경우가 있는데 이렇게 하면 빠뜨리는 경우의 수가 생기거나 시간이 지체될 수 밖에 없다. 이러한 노가다 문제의 경우 어떻게든 풀기만 하면 된다는 마인드로 최대한 빠르게 기계적으로 코딩하고 다음 문제로 넘어가야 한다.
풀이 자체는 부분 문자열 함수인 substr
하나로 해결된다.
전체 코드
1 |
|