코딩테스트/프로그래머스

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

starcat37 2023. 6. 4. 17:24

1. 링크

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

 

2. 문제 설명

(1) 문제 설명

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

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

  • 1478 → "one4seveneight"
  • 234567 → "23four5six7"
  • 10203 → "1zerotwozero3"

이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.

참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.

 

 

(2) 제한 사항

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

3. 코드

import re

def solution(s):
    word_num = {"zero": 0, "one": 1, "two": 2, "three": 3, "four": 4, "five": 5, "six": 6, "seven": 7, "eight": 8, "nine": 9}
    
    for word, num in word_num.items():
        s = re.sub(word, str(num), s)
    
    return int(s)

4. 설명

주어진 문자열 s에서 숫자를 가리키는 단어를 실제 숫자로 바꾸어주면 된다. 정규표현식을 쓰면 될 것 같아서 찾다가 아래와 같은 링크를 발견해서 거의 동일하게 코드를 짰다.

https://thispointer.com/replace-words-in-a-string-using-dictionary-in-python/

 

Replace words in a string using dictionary in Python - thisPointer

In this article, we will discuss how to replace multiple words in a string based on a dictionary.

thispointer.com

딕셔너리에 단어-숫자 쌍을 정의해놓고, 해당 딕셔너리의 key와 value를 가져와 for loop를 돌며 주어진 문자열 s에서 해당하는 단어를 숫자로 바꾼다. 이후 출력 형식에 맞게 integer로 s를 반환해주면 된다.

5. 배운 점

정규표현식을 쓰면 될 것 같은데? 라는 생각만 들고 실제로 구현은 잘 하지 못했다. 어느정도 보편적인 정규식 문제뿐만 아니라 다양한 코드에 정규식을 적용할 수 있도록 연습해야겠다.

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] 신규 아이디 추천  (0) 2023.05.28
[프로그래머스] 2016년  (0) 2023.05.21