문제 설명
영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.
제한사항
입출력 예시
numbers | result |
---|---|
"onetwothreefourfivesixseveneightnine" | 123456789 |
"onefourzerosixseven" | 14067 |
def solution(numbers):
answer = numbers
if ('one' in numbers):
answer = answer.replace('one', '1')
if ('two' in numbers):
answer =answer.replace('two', '2')
if ('three' in numbers):
answer =answer.replace('three', '3')
if ('four' in numbers):
answer =answer.replace('four', '4')
if ('five' in numbers):
answer =answer.replace('five', '5')
if ('six' in numbers):
answer =answer.replace('six', '6')
if ('seven' in numbers):
answer =answer.replace('seven', '7')
if ('eight' in numbers):
answer =answer.replace('eight', '8')
if ('nine' in numbers):
answer = answer.replace('nine', '9')
if ('zero' in numbers):
answer =answer.replace('zero', '0')
return int(answer)
비효율의 끝판왕.. 이렇게 한 이유는 enumerate 함수를 몰랐기 때문이다 dictionary를 가져와서 쓸까 잠시 고민했지만 dictionary를 잘 모르기 떄문에 벌어진 참사
def solution(numbers):
for num, eng in enumerate(["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]):
numbers = numbers.replace(eng, str(num))
return int(numbers)
조금은 효율이 나아진 풀이
Enumerate 함수를 쓰면 해당 리스트에서 element의 인덱스, 값 을 차례로 tuple로 return 한다. 이 예시에서는 리스트를 0부터 시작하게 했지만 만약 1부터 시작하게 하고 싶을 경우에는 start 옵션을 줄 수도 있다는게 장점이었다
ef solution(numbers):
r = {'zero': '0', 'one': '1', 'two': '2', 'three': '3', 'four': '4',
'five': '5', 'six': '6', 'seven': '7', 'eight': '8', 'nine': '9'}
for k in r.keys():
numbers = numbers.replace(k, r[k])
return int(numbers)
dictionary를 이용해서 풀어낸 풀이. str(i)로 replace 한 것도 좀 똑똑하지 않았나 뭐 그런 생각
아직은 갈길이 멀다..!