link: https://programmers.co.kr/learn/courses/30/lessons/81301
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
1478 → "one4seveneight"
234567 → "23four5six7"
10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.
숫자 영단어
0 zero
1 one
2 two
3 three
4 four
5 five
6 six
7 seven
8 eight
9 nine
제한사항
1 ≤ s의 길이 ≤ 50
s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.
"one4seveneight" -> 1478
"23four5six7" -> 234567
"2three45sixseven" -> 234567
"123" -> 123
def solution(s):
engList = ['zero','one','two','three','four','five','six','seven','eight','nine']
temp = list(s)
answer = []
words = []
for x in temp:
if 48 <= ord(x) <= 57:
answer.append(x)
else:
words.append(x)
temp_words = ''.join(words)
for i in range(10):
if temp_words == engList[i]:
answer.append(str(i))
words = []
answer = "".join(answer)
return int(answer)
step 1. 숫자를 발견했을 경우 if 48 <= ord(x) <= 57: 라는 조건을 걸어서 바로 정답에 쓸 수 있도록 한다.
step 2. 만약 숫자가 아니라 문자일 경우 words 리스트에 지속적으로 단어를 추가하며 'zero' 부터 'nine' 까지 단어가 있는지 확인한다. 만약 일치하는 단어가 있다면 그 단어에 해당하는 숫자를 answer 리스트에 추가해준다.
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)
출처: 프로그래머스 정답게시판 Best Answer
이 사람의 코드는 'dictionary'를 이용하여 풀이를 하였다.
주어진 입력값에서 특정 문자를 찾았을 경우 숫자로 대체하는 코드가 너무나 간결하고 보기 좋다.