본문 바로가기

개발/Algorithm

[프로그래머스] 숫자 문자열과 영단어(python)

프로그래머스, 숫자 문자열과 영단어

2021년 카카오 채용연계형 인턴십

 

TL;DR

  • 문자열(string)
  • 딕셔너리(dictionary)

문제 분석

1. 숫자의 일부 자릿수가 영단어로 바뀌었거나, 혹은 바뀌지 않고 그대로인 문자열 s를 원래 의미하는 숫자로 반환하는 함수를 완성하라.

 

- 입출력 예시를 통해 원하는 답을 확인할 수 있다.

입출력 형태

입출력 예시

 

- 주어진 문자열에 대해 글자로 주어진 문자열을 숫자로 변환하여 결과를 반환하면 된다.

풀이

def solution(s):
    answer = ''
    dic = {
        'zero': '0', 'one': '1', 'two': '2', 'three': '3',
        'four': '4', 'five': '5', 'six': '6', 'seven': '7',
        'eight': '8', 'nine': '9'
    }
    
    tmp = ''
    for c in s:
        if c in '0123456789':
            answer += c
        else:
            tmp += c
            
        if tmp in dic.keys():
            answer += dic[tmp]
            tmp = ''
            
    return int(answer)

 

- 글자로 된 숫자를 해당하는 숫자로 바꾸기 위한 딕셔너리(dictionary)를 선언한다.

- 주어진 문자열을 조회하며, 이미 숫자로 되어 있는 경우 별 다른 처리를 하지 않고 정답에 붙인다.

- 문자로 주어졌을 경우, 어떤 문자인지 확인하기 위한 tmp 변수를 갱신해나간다.

- 만약 tmp가 숫자를 타내는 문자가 된다면, 해당 값을 key로 해당하는 value를 정답에 붙인다. 그리고 tmp를 초기화한다.

- 숫자로 반환하기를 문제에서 요구하고 있으므로 숫자로 변환하여 반환한다.

 

개선된 풀이

def solution(s):
    answer = ''
    dic = {
        'zero': '0', 'one': '1', 'two': '2', 'three': '3',
        'four': '4', 'five': '5', 'six': '6', 'seven': '7',
        'eight': '8', 'nine': '9'
    }
    
    answer = s
    for key, value in dic.items():
        answer = answer.replace(key, value)
    return int(answer)

 

- replace() 메소드를 사용할 경우 보다 깔끕하게 문제를 해결할 수 있다.

- 딕셔너리에 있는 key와 value 쌍을 조회하며 해당하는 key가 존재할 경우 해당 value로 치환한다.

- 숫자로 변환하여 반환한다.

 

반응형