코딩 테스트 연습/[프로그래머스] Python

[LV.3] 숫자 문자열과 영단어 ⭐

duswjd_data 2025. 7. 7. 09:55

문제

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)