🔔 문제

출처 : https://programmers.co.kr/learn/courses/30/lessons/81301

문제 설명

img1.png

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.

다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.

  • 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

제한사항

  • 1 ≤ s의 길이 ≤ 50
  • s가 “zero” 또는 “0”으로 시작하는 경우는 주어지지 않습니다.
  • return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.

입출력 예

s result
"one4seveneight" 1478
"23four5six7" 234567
"2three45sixseven" 234567
"123" 123

입출력 예 설명

입출력 예 #1

  • 문제 예시와 같습니다.

입출력 예 #2

  • 문제 예시와 같습니다.

입출력 예 #3

  • “three”는 3, “six”는 6, “seven”은 7에 대응되기 때문에 정답은 입출력 예 #2와 같은 234567이 됩니다.
  • 입출력 예 #2와 #3과 같이 같은 정답을 가리키는 문자열이 여러 가지가 나올 수 있습니다.

입출력 예 #4

  • s에는 영단어로 바뀐 부분이 없습니다.

제한시간 안내

  • 정확성 테스트 : 10초

🔐 해결 (소스 코드)

# 프로그래머스 lv.1 숫자 문자열과 영단어
def solution(s):
    answer = s # s를 그대로 받아서 정답 변수에 넣음
    dic_words = {'zero':'0', 'one':'1', 'two':'2', 'three':'3', 'four':'4',
                'five':'5', 'six':'6', 'seven':'7', 'eight':'8', 'nine':'9'}
    
    for k, v in dic_words.items(): # items함수는 딕셔너리의 key, value를 반환
        answer = answer.replace(k, v) # replace는 문자열을 변경하는 함수,
                                      # 문자열 안에서 특정 문자를 새로운 문자로 변경
                                      # 여기서는, 문자로 되있는 것을 숫자로 바꾸도록 함
    return int(answer)

📝 후기 & 넋두리

이번 문제를 풀면서 느꼈던 것은 문제를 풀 때 활용할 수 있는 다양한 함수들을 숙지하고 있느냐가 중요하다는 것이었다.
함수들을 미리 숙지하고 있다면, 검색하는 시간을 줄일 수 있고, 생각하고 있는 접근법대로 바로바로 풀 수 있기 때문이다.

요즘 알고리즘 수준을 어떻게 하면 더 올릴 수 있을까 고민하고 있다.
수준 높은 문제를 시도하고 푸는데 더딘 것 같이 느껴지기 때문이다.
(플레이데이터 알고리즘 특강 깊이우선탐색 & 너비우선탐색 강의를 정리한 이후로 관련된 문제를 못 풀고 있다보니 더 그런것 같다)

좋은 책이나 유튜브 자료를 활용해서 프로그래머스에서 Lv.2 정도는 스스로 간단히 풀 수 있는 수준으로 빨리 만들고, 국비지원되는 알고리즘 강의를 수강해서 실력 점프를 빨리 해야되겠다.

화이팅!!! 😥💪

맨 위로 이동하기

Leave a comment