네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
1478 → "one4seveneight"
234567 → "23four5six7"
10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
처음시도:
def solution(s):
nums = {'0':"zero",
'1': "one",
'2': "two",
'3': "three",
'4': "four",
'5': "five",
'6': "six",
'7': "seven",
'8': "eight",
'9': "nine"}
answer= s
for i, (k,v) in enumerate(nums.items()):
# print(i,k,v)
if v in s:
answer = answer.replace(v, k)
return int(answer)
처음에 딕셔너리와, replace 를 사용해서 문제를 풀려 했다. 그런데 자꾸 에러가 나서 이게 아닌 가 싶어서 처음부터 다시 서치해가면서 정리했다. 딕셔너리에 숫자와 그에 대응되는 영어를 넣었다. for loop와 enumerate를 사용해 key와 val을 받고 if를 사용해 영어가 s에 있는 지 확인했다. 있으면 replace하게 만들었다. 마지막으로 int로 바꾼후 리턴하도록 만들었다.
겪은 에러
i) With list & replace: string(value)을 int(index)로 바꾸려해서 에러남
for k, v in enumerate(nums):
print(k, v)
ii) With dictionary & replace: s에 있는 영어를 다 가져오긴 하는데 replace가 마지막 숫자영어에만 적용되는 문제가 생김-> for loop를 썼기 때문에 마지막 영어만 바뀜
for i, (k,v) in enumerate(nums.items()):
# print(i,k,v)
answer= ''
if v in s:
print(v)
answer = s.replace(v, k)
Dictionary:
Iterate through dictionary keys: keys()
Iterate through dictionary values: values()
Iterate through dictionary key-value pairs: items()
enumerate(iterable, start): get both the element and index(count) from iterable obj(list, tuple, dictionary...)
can start the index at any val
-> 그렇다면 인덱스를 1부터 하려면?
ex) for i, name in enumerate(l, 1):
for k,v in nums.items():
if v in s:
answer = answer.replace(v, k)
return int(answer)
enumerate에 대한 개념이 제대로 잡혀있지않아 오래 걸린 것 같다. 그래도 다른 사람의 풀이를 보지 않고 풀어 뿌듯했다. :)