728x90
반응형
문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/81301
📝 문제설명
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
- 1478 → "one4seveneight"
- 234567 → "23four5six7"
- 10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다.
s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.
🔗 제한 사항
- 1 ≤ s의 길이 ≤ 50s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
- return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.
🔗입출력예
👉 문제풀이
- 먼저, 숫자와 영단어를 딕셔너리 형태로 저장해서 문제를 접근해야 될거같아서 딕셔너리 자료형을 만들어주었다.
- 반목문을 통해 문자열을 char에 하나하나씩 넣어 비교하기 시작했다.
- 그리고 s문자열에 숫자만 있을 경우 그냥 숫자를 출력하면 되서 isdigit() 함수를 통해 걸러냈다. 근데 return 값이 문자형이라 정답이랑 달라서 int(answer)로 정수형으로 변환시켜주었다.
- 숫자형이 아닌 문자일 경우는 temp 변수에 하나하나씩 문자열을 추가하여 num_dict의 key값과 비교하였다.
- 해당 Key값이 있을 경우 그 키에 해당하는 숫자를 answer변수에 문자를 추가한다.
- 이게 끝날 경우 다시 temp를 빈 문자열로 초기화 시킨다.(temp = '')
- 초기화를 안할 경우 계속 문자열이 누적되어, 원하는 값을 얻지 못한다.
def solution(s):
answer = ''
temp = ''
num_dict = {'zero': '0', 'one' : '1', 'two': '2',
'three': '3', 'four': '4', 'five':'5',
'six': '6', 'seven':'7', 'eight':'8',
'nine':'9'}
for char in s:
if char.isdigit():
answer += char
else:
temp += char
if temp in num_dict:
answer += num_dict[temp]
temp = ''
return int(answer)
👉 다른사람 문제풀이 1
num_dic = {"zero":"0", "one":"1", "two":"2", "three":"3", "four":"4", "five":"5", "six":"6", "seven":"7", "eight":"8", "nine":"9"}
def solution(s):
answer = s
for key, value in num_dic.items():
answer = answer.replace(key, value)
return int(answer)
👉 다른사람 문제풀이 2
def solution(s):
words = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
for i in range(len(words)):
s = s.replace(words[i], str(i))
return int(s)
👉 다른사람 문제풀이 3
def solution(s):
if 'one' in s:
s= s.replace('one', '1')
if 'zero' in s:
s= s.replace('zero', '0')
if 'two' in s:
s= s.replace('two', '2')
if 'three' in s:
s= s.replace('three', '3')
if 'four' in s:
s= s.replace('four', '4')
if 'five' in s:
s= s.replace('five', '5')
if 'six' in s:
s= s.replace('six', '6')
if 'seven' in s:
s= s.replace('seven', '7')
if 'eight' in s:
s= s.replace('eight', '8')
if 'nine' in s:
s= s.replace('nine', '9')
return int(s)
728x90
반응형
'알고리즘(백준, 프로그래머스) > [프로그래머스] Lv1' 카테고리의 다른 글
[프로그래머스] Lv1. 두 개 뽑아서 더하기 - 파이썬(Python) (0) | 2023.05.15 |
---|---|
[프로그래머스] 정렬 / Lv1. K번째수 - 파이썬(Python) (0) | 2023.05.12 |
[프로그래머스] Lv1. [1차] 비밀지도 for 카카오 - 파이썬(Python) (0) | 2023.05.12 |
[프로그래머스] Lv1. 문자열 내 마음대로 정렬하기 - 파이썬(Python) (0) | 2023.05.12 |
[프로그래머스] 완전탐색 / Lv1. 최소직사각형 - 파이썬(Python) (0) | 2023.05.11 |