Lv. 1, 68%
문제
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
- 1478 → "one4weveneight"
- 234567 → "23four5six7"
- 10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 <= s의 길이 <= 50
- s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
- return 값이 1이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.
입출력 예
입출력 예 #1
- 문제 예시와 같습니다.
입출력 예 #2
- 문제 예시와 같습니다.
입출력 예 #3
- "three"는 3, "six"는 6, "seven"은 7에 대응되기 때문에 정답은 입출력 예 #2와 같은 234567이 됩니다.
- 입출력 예 #2와 #3과 같이 같은 정답을 가리키는 문자열이 여러 가지가 나올 수 있습니다.
입출력 예 #4
- s에는 영단어로 바뀐 부분이 없습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/81301
계획:
입력받은 값에서 숫자면 그대로 result에 저장,
숫자가 아니면 하나씩 word에 저장해두다가
딕셔너리에서 똑같은 key값을 찾으면 숫자로 바꿔 result에 붙이기
최종 제출한 답:
num_eng = {'zero': '0', 'one': '1', 'two': '2', 'three': '3', 'four': '4',
'five': '5', 'six': '6', 'seven': '7', 'eight': '8', 'nine': '9'}
def solution(answer):
result = ''
word = ''
for i in range(len(answer)):
if answer[i].isdecimal(): # 0-9 숫자여야 True
result += answer[i]
else:
word += answer[i]
if word in num_eng:
result += num_eng[word]
word = ''
return int(result)
처음 진행 상황:
딕셔너리에서 value 값으로 key 값을 찾을 수 없나 고민이었는데
map - reversed 로 바꿀 수 있다고 하는데.. 그냥 직접 갈아끼웠다..ㅎ
영단어로 숫자를 찾을 것이므로 key:value 값을 'zero': '0'
그리고 0-9까지의 숫자여야 True를 출력해주는 isdecimal()를 사용하였다
왼쪽 상태로 손 놓고 있었는데 자꾸 답이 출력되다가 마는 느낌이었달까
밤늦게까지 남아계시던 핑핑이조 동기님의 도움으로 해결🙏
1. 괄호 빼먹음
answer[i].isdecimal: → answer[i].isdecimal():
2. 오타?
word += num_eng[word] → result += num_eng[word]
왜 word를 넣어뒀었는지 의문ㅋㅋㅋㅋㅋ
3. word와 break
break → word = ''
word = '' 가 신의 한 수였다! 한 영단어를 숫자로 바꾸고나면 뚝 끊기더니
새로 변수를 지정해주지 않아 그랬던 것이었다
그리고 break를 적어놔서는 실행이 중단되버리기
4. int
return result → return int(result)
이건 사실 식이 틀렸는데 int를 붙이니 자꾸 출력이 안 되서 일단 떼둔 것이었는데
암튼 다시 추가~^^
다른 풀이
replace를 안 써봐서 감이 안 왔는데 막상 보니까 넘나 간단하다
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)
replace 함수 사용법:
str.replace('변경하고 싶은 문자', '변경 후 문자', 횟수)
여기서 횟수는 입력하지 않을 경우 모든 문자를 변경해준다
또 다른 풀이
def solution(s):
if 'one' in s:
s= s.replace('one', '1')
if 'zero' in s:
s= s.replace('zero', '0')
if 'two' in s:
s= s.replace('two', '2')
if 'three' in s:
s= s.replace('three', '3')
if 'four' in s:
s= s.replace('four', '4')
if 'five' in s:
s= s.replace('five', '5')
if 'six' in s:
s= s.replace('six', '6')
if 'seven' in s:
s= s.replace('seven', '7')
if 'eight' in s:
s= s.replace('eight', '8')
if 'nine' in s:
s= s.replace('nine', '9')
return int(s)
이것도 간단해 보이지만 if가 많다ㅎ
'코딩테스트' 카테고리의 다른 글
코딩테스트 입문_최빈값 구하기_sorted() (0) | 2023.03.30 |
---|---|
코딩테스트 입문_분수의 덧셈_fractions 모듈 (2) | 2023.03.24 |
코딩테스트 입문_옹알이(1)_permutations (2) | 2023.03.23 |
코딩테스트 연습문제_짝수와 홀수 (0) | 2023.03.22 |
코딩테스트 모의고사_수포자 삼인방_cycle zip (5) | 2023.03.21 |