[ Python ] 숫자 문자열과 영단어

2026. 6. 26. 21:55·TIL/코테
[Programmers/Python] 숫자 문자열과 영단어 풀이 정리
문제 링크: Programmers - 숫자 문자열과 영단어
딕셔너리로 영단어와 숫자 문자의 대응 관계를 만들고, replace()로 문자열을 치환하는 문제다.
이번 문제의 핵심은 숫자와 영어 숫자 단어가 섞인 문자열을 원래 숫자로 복원하는 것이다. 예를 들어 "one4seveneight"는 1478이 되어야 한다. 따라서 "zero"부터 "nine"까지의 치환 규칙을 만든 뒤, 문자열 안의 영단어를 숫자 문자로 바꾸면 된다.
dictionary replace() 문자열 치환 for문 key 접근 int()

1. 문제 핵심

문자열 s에는 숫자 문자와 영어 숫자 단어가 섞여 있다. 목표는 이 문자열을 숫자로만 이루어진 문자열로 바꾼 뒤, 정수로 반환하는 것이다.

입력 예시: "one4seveneight"
변환 결과: "1478"
최종 반환: 1478

영어 숫자 단어와 숫자 문자의 대응 관계가 정해져 있으므로, 이를 딕셔너리로 만들면 치환 규칙을 명확하게 관리할 수 있다.

이 문제는 직접 인덱스를 찾아 단어를 자르는 문제가 아니라, replace()를 이용해 문자열 안의 영단어를 숫자 문자로 바꾸는 문제다.

2. 처음 접근

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

처음에는 영어 숫자 단어와 실제 숫자를 연결하기 위해 딕셔너리를 만들었다. 접근 방향은 맞았지만, 딕셔너리 key를 문자열로 작성하지 않아 문제가 생길 수 있었다.

딕셔너리에서 zero, one처럼 따옴표 없이 쓰면 문자열이 아니라 변수로 인식된다. 따라서 'zero', 'one'처럼 문자열 key로 작성해야 한다.

3. 단계별 개선 과정

1) 딕셔너리 key를 문자열로 수정

영어 숫자 단어는 문자열이므로, 딕셔너리 key도 문자열로 작성해야 한다.

num_dict = {
    'zero': 0,
    'one': 1,
    'two': 2,
    'three': 3,
    'four': 4,
    'five': 5,
    'six': 6,
    'seven': 7,
    'eight': 8,
    'nine': 9
}

2) value를 문자열 숫자로 변경

이 문제는 문자열 안의 영단어를 숫자 문자로 바꾸는 과정이 필요하다. 따라서 value를 정수 1보다 문자열 '1'로 두는 것이 replace()와 함께 사용하기 쉽다.

num_dict = {
    'zero': '0',
    'one': '1',
    'two': '2',
    'three': '3',
    'four': '4',
    'five': '5',
    'six': '6',
    'seven': '7',
    'eight': '8',
    'nine': '9'
}

3) 붙어 있는 단어는 replace()로 처리

처음에는 "seveneight"처럼 단어가 붙어 있으면 어디까지가 seven이고 어디부터가 eight인지 직접 찾아야 한다고 생각할 수 있다. 하지만 replace()는 문자열 안에서 해당 단어를 자동으로 찾아 바꿔준다.

"seveneight".replace("seven", "7") → "7eight"
"7eight".replace("eight", "8") → "78"

4) replace 결과는 s에 다시 저장

중간에는 replace() 결과를 answer에 계속 더하는 방식으로 생각했다.

for key in num_dict:
    num = s.replace(key, num_dict[key])
    answer += num

하지만 replace()는 바뀐 일부 문자만 반환하는 것이 아니라, 치환이 적용된 전체 문자열을 반환한다. 따라서 이를 answer에 누적하면 전체 문자열이 여러 번 이어 붙게 된다.

이 문제에서는 answer에 누적하는 것이 아니라, 기존 문자열 s 자체를 계속 갱신해야 한다.

4. 최종 풀이

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

    for key in num_dict:
        s = s.replace(key, num_dict[key])

    return int(s)

딕셔너리의 key를 하나씩 꺼내고, 문자열 s 안의 key를 해당 value로 치환한다. 치환된 결과는 다시 s에 저장한다.

for key in num_dict: 딕셔너리 key를 하나씩 순회
num_dict[key]: 현재 key에 해당하는 숫자 문자 조회
s = s.replace(key, num_dict[key]): 문자열 치환 결과를 다시 저장
return int(s): 숫자 문자열을 정수로 변환

5. 풀이 흐름

예를 들어 s = "one4seveneight"라면, 딕셔너리 key를 순회하면서 문자열이 다음과 같이 갱신된다.

"one4seveneight"
→ "14seveneight"
→ "147eight"
→ "1478"

마지막에 남은 문자열은 숫자로만 이루어진 문자열이다. 따라서 int()로 정수 변환하여 반환하면 된다.

replace()는 원본 문자열을 직접 수정하지 않고, 바뀐 새 문자열을 반환한다. 따라서 s = s.replace(...)처럼 다시 저장해야 이전 치환 결과가 다음 치환에도 반영된다.

6. 유사 유형 풀이

같은 핵심 문법을 사용해 문장 안의 금지어를 마스킹 문자열로 바꾸는 유사 문제를 풀었다.

문자열 sentence와 금지어 딕셔너리 mask_dict가 주어졌을 때, 문장 안에 있는 금지어를 딕셔너리에 저장된 마스킹 문자열로 모두 바꾸는 문제다.
sentence = "python is fun and java is also fun"
mask_dict = {
    "python": "******",
    "java": "****",
    "fun": "***"
}

def solution(sentence): 
    for key in mask_dict: 
        sentence = sentence.replace(key, mask_dict[key]) 
    return sentence

원래 문제와 같은 점

두 문제 모두 딕셔너리의 key를 하나씩 꺼내고, 문자열 안의 key를 value로 치환한다. 또한 치환 결과를 다시 원래 문자열 변수에 저장한다.

원래 문제: s = s.replace(key, num_dict[key])
유사 문제: sentence = sentence.replace(key, mask_dict[key])

핵심 구조: 문자열 = 문자열.replace(key, dict[key])

원래 문제와 다른 점

원래 문제는 숫자 영단어를 숫자 문자로 바꾼 뒤 최종 결과를 정수로 반환해야 한다. 반면 유사 문제는 마스킹된 문자열 자체를 반환하면 되므로 int() 변환이 필요하지 않다.

원래 문제: return int(s)
유사 문제: return sentence

7. 핵심 정리

이번 유형의 핵심은 치환 규칙을 딕셔너리로 만들고, replace() 결과를 문자열 변수에 계속 저장하는 것이다.

딕셔너리를 사용하면 "zero" → "0", "one" → "1"처럼 대응 관계를 명확하게 표현할 수 있다. 이후 딕셔너리를 순회하면서 문자열 안의 key를 value로 바꾸면 된다.

replace()는 원본 문자열을 직접 바꾸지 않는다. 바뀐 새 문자열을 반환하므로, 반드시 s = s.replace(...) 형태로 다시 저장해야 한다.

8. 사용한 핵심 문법 정리

딕셔너리 생성
{'zero': '0', 'one': '1'}처럼 key와 value의 대응 관계를 저장한다.
문자열 key
zero처럼 쓰면 변수로 인식된다. 문자열 key로 쓰려면 'zero'처럼 따옴표를 붙여야 한다.
딕셔너리 순회
for key in num_dict처럼 작성하면 딕셔너리의 key가 하나씩 나온다.
value 접근
num_dict[key]를 사용하면 현재 key에 해당하는 value를 가져올 수 있다.
replace()
s.replace(old, new)는 문자열 안의 old를 new로 바꾼 새 문자열을 반환한다.
문자열 갱신
s = s.replace(key, num_dict[key])처럼 치환 결과를 다시 저장해야 이전 치환 결과가 유지된다.
int()
숫자 형태의 문자열을 정수로 변환한다. 최종 결과를 숫자로 반환하기 위해 사용했다.

9. 기본 Python 구조

for key in dictionary:
    string = string.replace(key, dictionary[key])
정리하면, 이번 문제는 딕셔너리와 문자열 치환을 함께 사용하는 기본 유형이다. dictionary[key]로 치환할 값을 가져오고, replace() 결과를 다시 문자열 변수에 저장하는 흐름을 기억하면 된다.

'TIL > 코테' 카테고리의 다른 글

[ SQL ] 최솟값 구하기와 어린 동물 찾기  (0) 2026.06.29
[ Python ] 문자열 내 마음대로 정렬하기  (0) 2026.06.29
[ SQL ] 상위 n개 레코드  (0) 2026.06.25
[ Python ] 시저 암호  (0) 2026.06.25
[ SQL ] 아픈 동물 찾기  (0) 2026.06.24
'TIL/코테' 카테고리의 다른 글
  • [ SQL ] 최솟값 구하기와 어린 동물 찾기
  • [ Python ] 문자열 내 마음대로 정렬하기
  • [ SQL ] 상위 n개 레코드
  • [ Python ] 시저 암호
yustitix
yustitix
Semiconductor Process & Quality Data Analyst Candidate, M.S. in Polymer Engineering, @Yustitix </br> Aspiring Semiconductor Process & Quality Data Analyst, aiming to grow into a Manufacturing AI Data Scientist.
  • yustitix
    데분하다
    yustitix
  • 전체
    오늘
    어제
    • 분류 전체보기 (52)
      • Portfolio (4)
      • Job search (9)
        • JD (3)
        • Article study (5)
        • News room (1)
      • TIL (35)
        • TIL (2)
        • 코테 (11)
        • Python (6)
        • 머신러닝 (6)
        • 기초 통계 (3)
        • 반도체 공정 입문 (7)
      • Project (4)
        • FAERS 이상사례 자가보고 데이터 기반 모니터링.. (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
yustitix
[ Python ] 숫자 문자열과 영단어
상단으로

티스토리툴바