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/
딕셔너리에 단어-숫자 쌍을 정의해놓고, 해당 딕셔너리의 key와 value를 가져와 for loop를 돌며 주어진 문자열 s에서 해당하는 단어를 숫자로 바꾼다. 이후 출력 형식에 맞게 integer로 s를 반환해주면 된다.
5. 배운 점
정규표현식을 쓰면 될 것 같은데? 라는 생각만 들고 실제로 구현은 잘 하지 못했다. 어느정도 보편적인 정규식 문제뿐만 아니라 다양한 코드에 정규식을 적용할 수 있도록 연습해야겠다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 신규 아이디 추천 (0) | 2023.05.28 |
---|---|
[프로그래머스] 2016년 (0) | 2023.05.21 |