네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
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
요약: "one4seveneight" 문자열을 1478인 숫자로 리턴하세요
def solution(s):
#딕셔너리를 이용하자.
#건네받은 게 onesix6eight이런식이면 one을 1로 바꿔주고
#딕셔너리 만들기
dic = {'zero':'0',
'one':'1',
'two':'2',
'three':'3',
'four':'4',
'five':'5',
'six':'6',
'seven':'7',
'eight':'8',
'nine':'9'
}
#숫자면 빼줄까? 오히려 문자를 계산해주는 배열이 필요해.
#인덱스가 돌아야 하는데.. askii 코드는 0~9까지가 아니니까
answer = ''
#one 얻어내기.
word = ''
for i in s:
if i not in dic.values():
word += i
#이어져있는 것 막기.
if word in dic:
answer += dic[word]
word = ''
else:
for j in dic:
if word == j:
answer += dic[j]
word = ''
answer += i
print(answer)
answer1 = 0
answer1 = int(answer)
return answer1
문제를 보고 이 문제는 딕셔너리로 푸는 문제라고 생각했기 때문에 딕셔너리를 바로 만들었다. 숫자를 key로 할 지 영단어를 key로 할 지 고민하다가 숫자로 바꿔야할 게 value이고 in을 쓸 때 편하게 영단어를 key로 놨다.
문자열을 받아서
for i in s
로 i를 받을 거기 때문에 숫자 value를 문자처리안했다가 에러났다.
풀 때는 for문을 어케 돌리나 하다가 풀고 나니까 별로 할 얘기가 없네욥..
아 word를 초기화해야 할 경우는 두가지다. 4같은 숫자 문자를 만나거나 seveneight처럼 이어져 있는 경우를 방지하기 위해서 word 문자열을 더해주다가 key와 같으면 초기화 해준다. 생각해보니 else에 저거 없애도 될듯.
생각을 수정했다. word를 key를 만날때까지 for문을 돌다가 answer에 넣어주면 된다. 간단하네..?
고수가 되자.