본문 바로가기

Algorithms and Languages/알고리즘 파이썬 문제풀이

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

문제 접근 및 공부 내용, 풀이는 모두 하단 코드에 "주석"으로 포함되어 있으니 참고해주세요.

문제 유형 보기

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

 

입력 : 일부가 인코딩된 문자열 s

출력 : 인코딩된 일부를 디코딩한 원본 문자열

s	result
"one4seveneight"	1478
"23four5six7"	234567
"2three45sixseven"	234567
"123"	123

 

일부가 인코딩된 문자열 s가 주어짐.

인코딩된 일부를 디코딩한 원본 문자열을 반환하자.


1차 풀이

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 word, num in num_dict.items():
        s = s.replace(word, num)
    
    return int(s)

정규 표현식으로도 풀 수 있어보임.

⇒ replace를 반복할 경우는 정규 표현식이 일반적으로 더 효율적일 가능성이 높음.

2차 풀이(정답 확인함)

# 2차 풀이 : 파이써닉하게 풀이
def solution(s):
    numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]

    for number, name in enumerate(numbers):
        s = s.replace(name, str(number))

    return int(s)

이렇게 리스트와 enumerate를 활용해 풀 수도 있구나!


250217 재풀이

def solution(s):
    
    word_to_number_dict = {'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_to_number_dict.items():
        s = s.replace(word, num)
    
    return int(s)
def solution(s):
    
    numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
    
    for num, word in enumerate(numbers):
        s = s.replace(word, str(num))
    
    return int(s)

# enumerate는 (index from 0 to n-1, original_elements) 튜플을
# 원소로 가지는 enumberate 객체를 생성.