2021 카카오 채용연계형 인턴십
Lv.1 문자열 유형
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
- 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로 주어집니다.
풀이
문제와는 전혀 상관없지만 sorted를 통해 내림차순으로 정렬하여 replace 하였다.
문제의 영단어 표에서 다른 단어로 대치되어도 풀 수 있도록 긴 단어부터 변환되도록 풀었다.
문자열 변환의 경우 딕셔너리 자료형에서 숫자를 문자로 정의하여 작업을 줄일 수 있다.
def solution(s):
eng_vocab = {
'zero': "0",
'one': "1",
'two': "2",
'three': "3",
'four': "4",
'five': "5",
'six': "6",
'seven': "7",
'eight': "8",
'nine': "9"
}
for x in sorted(list(eng_vocab.keys()), key=len, reverse=True):
if x in s:
s = s.replace(x, eng_vocab[x])
return int(s)
추가 풀이
def solution(s):
eng = ['zero', 'one', 'two', 'three', 'four',
'five', 'six', 'seven', 'eight', 'nine']
for word in eng:
if word in s:
s = s.replace(word, f'{eng.index(word)}')
return int(s)
단어의 중복이 없고 대한 인덱스가 연속적인 경우 위처럼 하나의 리스트에 인덱스를 이용하여 푸는게 제일 깔끔해보인다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 신고 결과 받기 - python (0) | 2022.02.06 |
---|---|
[프로그래머스] 문자열 압축 풀이 - python (0) | 2022.01.13 |
[프로그래머스] 신규 아이디 추천 풀이 - python (0) | 2022.01.12 |