문제 접근 및 공부 내용, 풀이는 모두 하단 코드에 "주석"으로 포함되어 있으니 참고해주세요.
문제 유형 보기
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 객체를 생성.
'Algorithms and Languages > 알고리즘 파이썬 문제풀이' 카테고리의 다른 글
[Python/프로그래머스] 42578. 의상 (0) | 2025.02.04 |
---|---|
[Python/프로그래머스] 42576. 완주하지 못한 선수 (0) | 2025.02.04 |
[Python/백준] 2798. 블랙잭 (0) | 2025.02.04 |
[Python/프로그래머스] 12932. 자연수 뒤집어 배열로 만들기 (0) | 2025.02.04 |
[Python/LeetCode] 1. Two Sum (0) | 2025.02.03 |