본문 바로가기
Algorithm/Python

[프로그래머스] 숫자 문자열과 영단어

by _sweep 2022. 4. 11.

문제 링크 >> https://programmers.co.kr/learn/courses/30/lessons/81301

 

 

📋 문제

 

네오와 프로도가 숫자놀이를 하고 있습니다.

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

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

  • 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

 

 

📝 풀이

✔️ 첫 번째 풀이

def solution(s):
    answer = ""
    words = {
        "zero" : "0",
        "one": "1",
        "two": "2",
        "three": "3",
        "four": "4",
        "five": "5",
        "six": "6",
        "seven": "7",
        "eight": "8",
        "nine": "9",
    }

    temp = ""
    for i in s:
        temp += i
        if temp.isdigit():
          answer += temp
          temp = ""
        elif temp in words:
          answer += words[temp]
          temp = ""

    return int(answer)

 

먼저 문자열을 숫자로 바꾸기 위해 주어진 영단어와 숫자 쌍을 담은 딕셔너리인 words를 만든다.

이후 입력으로 주어진 문자열 s의 각 문자를 살펴본다.

 

각 문자를 temp에 담아가며 temp가 숫자인지, 아니면 temp가 words에 있는지 확인한다.

temp가 숫자라면 바로 answer에 temp를 더해주고 temp를 빈 문자열로 초기화한다.

temp가 words에 있다면 words[temp]에 해당하는 값을 answer에 더해주고 temp를 초기화한다.

두 가지 경우가 모두 아니라면 단순히 temp에 문자를 더하는 작업만 한다.

 

마지막으로 s가 의미하는 숫자를 리턴해야 하므로 answer의 숫자형을 리턴한다.

 

✔️ 두 번째 풀이

def solution(s):
    answer = s
    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 words.items():
        answer = answer.replace(k, v)
    
    return int(answer)

 

그냥 .items()로 확인하고 .replace() 쓰면 되는 거였는데 나는 바보였다.

 

 

 

 

 

'Algorithm > Python' 카테고리의 다른 글

[백준 1158번] 요세푸스 문제  (0) 2022.04.12
[프로그래머스] 큰 수 만들기  (0) 2022.04.11
[LeetCode] Container With Most Water  (0) 2022.04.11
[LeetCode] Assign Cookies  (0) 2022.04.09
[LeetCode] Valid Palindrome  (0) 2022.04.09

댓글