Programmers_숫자 문자열과 영단어

Kyungtaek Oh·2022년 1월 14일
0

[Programmers] Problems

목록 보기
5/66

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로 주어집니다.

Input Example

"one4seveneight" -> 1478
"23four5six7" -> 234567
"2three45sixseven" -> 234567
"123" -> 123

Code

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 리스트에 추가해준다.

Output & Screen shot

Better Code

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'를 이용하여 풀이를 하였다.
주어진 입력값에서 특정 문자를 찾았을 경우 숫자로 대체하는 코드가 너무나 간결하고 보기 좋다.

profile
Studying for Data Analysis, Data Engineering & Data Science

0개의 댓글

관련 채용 정보