
문제
https://school.programmers.co.kr/learn/courses/30/lessons/81301
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
- 주어진 문자열 s는 숫자와 영단어(숫자에 해당하는)로 이루어져 있다. 이 문자열을 원래의 숫자로 변환하는 함수를 완성하라


- 제한사항)
1 ≤ s의 길이 ≤ 50
s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않음
return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어짐
풀이 흐름
- 숫자와 영단어 매핑: 딕셔너리 사용
- 문자열 치환: .replace()로 영단어 → 숫자 변환 (반복문 활용)
- 최종 숫자 반환: int() 사용
정답 코드 1
def solution(s):
dic = {'zero':0, 'one':1, 'two':2, 'three':3, 'four':4,
'five':5, 'six':6, 'seven':7, 'eight':8, 'nine':9}
for key, value in dic.items():
s = s.replace(key, str(value))
return int(s)
코드 설명
dic = {'zero':0, 'one':1, 'two':2, 'three':3, 'four':4,
'five':5, 'six':6, 'seven':7, 'eight':8, 'nine':9}
- 숫자와 영단어를 매핑한 딕셔너리를 만들기
(예: 'one' → 1, 'seven' → 7)
for key, value in dic.items():
s = s.replace(key, str(value))
- 딕셔너리의 모든 key(영단어)를 문자열 s에서 찾아 해당 숫자 문자열(str(value))로 치환
(예: "one4seveneight" → "14seveneight" → "147eight" → "1478") - .replace() 함수는 문자열 전체에서 해당 단어를 전부 찾아서 치환
return int(s)
- 치환이 끝난 문자열을 int()로 변환하여 정수로 반환
정답 코드 2
def solution(s):
words = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
for i, word in enumerate(words):
s = s.replace(word, str(i))
return int(s)
코드 설명
words = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
- 숫자와 영단어의 대응 리스트 만들기
- words[0] → "zero"
- words[1] → "one"
- words[2] → "two"
...
- 리스트의 인덱스 숫자가 곧 실제 숫자와 매칭
for i, word in enumerate(words):
s = s.replace(word, str(i))
- 리스트에서 enumerate를 사용해 인덱스(i)와 단어(word)를 함께 가져옴
(예: (0, 'zero'), (1, 'one'), (2, 'two') …) - 문자열 s 안에서 해당 영단어 word를 찾아 숫자 문자열(str(i))로 모두 치환
(예: "one4seveneight" → "14seveneight" → "147eight" → "1478") - .replace() 함수는 문자열 전체에서 해당 단어를 전부 찾아서 치환
return int(s)
- 치환이 끝난 문자열을 int()로 변환하여 정수로 반환
첫 번째 시도 (실패)
def solution(s):
dic = {'zero':0, 'one':1, 'two':2, 'three':3, 'four':4,
'five':5, 'six':6, 'seven':7, 'eight':8, 'nine':9}
for key, value in dic.items():
s = s.replace(key, value)
return int(s)
- replace() 함수는 문자열을 문자열로 대체 (타입 일관성)
- 현재 value는 정수(int) 타입
- 해결 방법1) 숫자도 문자열(str) 로 바꿔야 정상 작동
s = s.replace(key, str(value))
- 해결 방법2) 딕셔너리의 value도 초기부터 문자열로 저장
def solution(s):
dic = {'zero': '0', 'one': '1', 'two': '2', 'three': '3', 'four': '4',
'five': '5', 'six': '6', 'seven': '7', 'eight': '8', 'nine': '9'}
for key, value in dic.items():
s = s.replace(key, value)
return int(s)'코딩 테스트 연습 > [프로그래머스] Python' 카테고리의 다른 글
| [LV.3] 정렬 > K번째수 (1) | 2025.07.09 |
|---|---|
| [LV.3] 연습문제 > 문자열 내 마음대로 정렬하기 ⭐️ (1) | 2025.07.08 |
| [LV.3] 연습문제 > 시저 암호 (0) | 2025.07.04 |
| [LV.3] 완전탐색 > 최소직사각형 (0) | 2025.07.03 |
| [LV.3] 연습문제 > 크기가 작은 부분문자열 (1) | 2025.07.02 |