[파이썬/알고리즘] 프로그래머스-숫자 문자열과 영단어 (카카오 2021 인턴십 코딩테스트)

[문제]

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.

다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.

  • 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

 

 

 

[입출력 예]

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

 

 

[나의 풀이]

def solution(s):
    result = []
    relation = {'zero':'0', 'one':'1', 'two':'2', 'three':'3', 'four':'4', 'five':'5', 'six':'6', 'seven':'7', 'eight':'8', 'nine':'9'}
    
    arr = []
    for c in s:
        if c in relation.values(): 		# 문자가 0~9일 경우
            result.append(c) 		# 리스트에 바로 추가
        else: 		# 0~9가 아닐경우 변환 과정을 거침
            arr.append(c) # 과정1
            tmp = ''.join(arr) # 과정1
            if tmp in relation.keys(): # 과정2
                arr = []
                result.append(relation[tmp])
            
    return int(''.join(result)) # 과정3

약간.. 복잡하게 풀었다.... 아직 파이썬이 익숙하지 않은 탓이라 생각한다..^^

 

우선 relation에 영단어와 숫자의 관계를 딕셔너리로 나타냈다.

 

그다음, 주어진 문자열 s를 한 글자씩 검색한다.

문자가 0~9일 경우에는 리스트에 바로 추가하고,

 

아닐 경우에는 변환 과정을 거친다.

변환 과정은 다음과 같다.

 

과정 1) arr에 문자를 넣고, 그다음 문자열로 변환시켜 tmp에 넣어준다. 

arr tmp
['o'] 'o'
['o', 'n'] 'on'
['o', 'n', 'e'] 'one'

 

과정 2) tmp가 zero~nine 중에 해당되는 게 있다면 arr을 비워주고, relation[tmp]를 result에 추가해준다.

(arr을 비우는 이유는 영단어를 또 검사해야 하므로!!)

 

과정 3) 리스트인 result를 문자열로 바꾼 후, 정수형으로 바꾸어서 반환!

 

 

[다른 사람의 풀이]

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)

가장 높은 좋아요 수를 받으신 분의 풀이를 가져왔다.

너무나도 깔끔하고.. 간단하다... ㅠㅠ

replace 하나로 해결될 수 있다는 게 놀랍다 👍👍

 

 

 

 

코딩테스트 연습 - 숫자 문자열과 영단어

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자

programmers.co.kr

 

320x100