[프로그래머스] Lv.0 영어가 싫어요

Jiumn·2022년 12월 16일
0

[프로그래머스] Lv.0 영어가 싫어요

문제 설명

영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.

입출력 예 설명

입출력 예 #1

"onetwothreefourfivesixseveneightnine"를 숫자로 바꾼 123456789를 return합니다.

입출력 예 #1

"onefourzerosixseven"를 숫자로 바꾼 14067를 return합니다.

풀이

나의 풀이

replace 사용하기

"one" = 1,
"two" = 2, ... 와 같은 형태로 특정 문자열을 숫자로 변경해야 하므로 어떤 함수를 써야할까 찾아보다 replace 함수로 가능하겠다 싶었다.

// replace 함수 예제
val_test = '123,456,789,123'

val_new = val_test.replace(',', ':')
print(val_new)

-- Result
123:456:789:123

출처: https://cosmosproject.tistory.com/316

그래서 다음과 같이 작성했다.

def solution(numbers):
    result = int(numbers.replace("one","1").replace("two","2").replace("three","3").replace("four","4").replace("five","5").replace("six","6").replace("seven","7").replace("eight","8").replace("nine","9").replace("zero","0"))
    return result

replace 지옥을 만들었다. 지저분한 코드인 건 알지만... 테스트 통과하길래 제출해봤는데...

7점 획득 무엇...?
마음을 알 수 없는 알고리즘이다.

그렇다면 고수들은 어떻게 풀었다 살펴봤다.

다른 풀이

for in enumerate 사용하기

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)
  • for num, eng in enumerate(["zero", "one", ..., "nine"]):
    "zero"부터 "nine"까지 문자열을 담은 배열을 만들어준다. 그리고 num을 인덱스로, eng을 반복할 요소로 넣어준다.
    (반복문이 실행될 때마다 다음과 같이 결과값이 나온다.)
    0, "zero"
    1, "one"
    ...
    9, "nine"

  • numbers = numbers.replace(eng, str(num)):
    replace 함수에 eng과 num을 넣어준다. (eng을 num으로 변경해준다는 뜻이다. ex. "zero" -> 1)

  • return int(numbers): 결과값은 숫자이므로 int()로 타입을 변환해준다.

파이썬에 for in enumerate 라는 똑똑한 반복문이 있었는지 다시 한번 기억을 되살려보는 기회가 되었다.

출처: https://www.daleseo.com/python-enumerate/

profile
Back-End Wep Developer. 꾸준함이 능력이다.

0개의 댓글