[문제설명]
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
- 1478 → "one4seveneight"
- 234567 → "23four5six7"
- 10203 → "1zerotwozero3"
[문제]
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
zero | one | two | three | four | five | six | seven | eight | nine |
[제한사항]
- 1 ≤ s의 길이 ≤ 50
- s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
- return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.
[입출력 예]
s | result |
"one4seveneight" | 1478 |
"23four5six7" | 234567 |
"2three45sixseven" | 234567 |
"123" | 123 |
[입출력 예 설명]
입출력 예 #1
문제 예시와 같습니다.
입출력 예 #2
문제 예시와 같습니다.
입출력 예 #3
문제 예시와 같습니다.
입출력 예 #4
s에는 영단어로 바뀐 부분이 없습니다.
[제한시간 안내]
정확성 테스트: 10초
[문제풀이]
replace 함수의 존재만 알고있다면 매우 쉬운 문제이다. 굳이 for loop을 돌지 않아도 쉽게 처리가 가능한 문제였다.
아래 코드에서는 굳이
answerStr = answerStr.replace('zero', '0')
answerStr = answerStr.replace('one', '1')
...
이런 식으로 코드를 길게 쓰지 않고, 코드라인 줄바꿈 + 체이닝을 사용하였다.
def solution(s):
answerStr = s
answerStr = answerStr.replace('zero', '0') \
.replace('one', '1') \
.replace('two', '2') \
.replace('three', '3') \
.replace('four', '4') \
.replace('five', '5') \
.replace('six', '6') \
.replace('seven', '7') \
.replace('eight', '8') \
.replace('nine', '9');
answer = int(answerStr)
return answer
두 번째 방식으로는, 문자열과 숫자를 key, value로 하는 dictionary를 미리 정의한 후, for loop를 통해 replace하는 방식이다.
def solution(s):
answerStr = s
dict_str_to_num = {'zero': '0', 'one': '1', 'two': '2', 'three': '3', 'four': '4', 'five': '5', 'six': '6', 'seven': '7', 'eight': '8', 'nine': '9', }
for item in dict_str_to_num.items():
answerStr = answerStr.replace(item[0], item[1])
answer = int(answerStr)
return answer
처리해야 하는 데이터의 양이 크지도 않기 때문에, 둘 중 어느 방식으로 해도 성능에 큰 영향이 없는 것을 확인할 수 있다. 이 문제의 경우 코드의 양이 줄어든 것도 아니기 때문에 본인의 스타일에 맞는 방식을 택하면 될 것 같다.
'Development > 코딩테스트' 카테고리의 다른 글
코딩테스트 연습 | 키패드 누르기 | 2020 카카오 인턴쉽 | python (0) | 2022.05.07 |
---|---|
코딩테스트 연습 | 없는 숫자 더하기 | 월간 코드 챌린지 시즌3 | python (0) | 2022.05.06 |
코딩테스트 연습 | 로또의 최고 순위와 최저 순위 | 2021 Dev-Matching: 웹 백엔드 개발자(상반기) | Python (0) | 2022.05.04 |
코딩테스트 연습 | 신고 결과 받기 | 2022 KAKAO BLIND RECRUITMENT | Python (0) | 2022.05.03 |
코딩테스트 연습 | 신규 아이디 추천 | 2021 KAKAO BLIND RECRUITMENT | Python (0) | 2022.05.02 |