[Lv1] 숫자 문자열과 영단어

이말감·2022년 7월 25일
0

Programmers

목록 보기
16/32

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

문제

링크

풀이

from collections import deque

def solution(s):
    answer = ''
    number = {'zero' : '0', 'one' : '1', 'two' : '2', 'three' : '3', 'four': '4', 'five' : '5', 'six' : '6', 'seven' : '7', 'eight' : '8', 'nine' : '9'}
    queue = deque(list(map(str, s)))
    while queue :
        q = queue.popleft()
        if q.isdigit() :
            answer += q
            continue
        while q not in number :
            q += queue.popleft()
        answer += number[q]
    return int(answer)

영단어를 key, 숫자 문자열을 value로 한 딕셔너리를 만들었다.
큐를 이용해서 앞에서 부터 한 문자씩 받은 후, 해당 문자가 숫자인지 아닌지 여부를 확인했다.
숫자일 경우 바로 answer에 붙이고, 아닐 경우 반복해서 문자를 출력한 후 문자열이 딕셔너리 number에 있는지 확인한 후, answer에 붙였다.

문제를 다 풀고 다른 분들의 코드를 보니 와 replace를 생각하지 못해서 !!!!
너무 아쉬웠다.

replace를 이용해서 아래와 같이 풀 수 있다.

def solution(s):
    number = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
    for i, n in enumerate(number) :
        s = s.replace(n, str(i))
    return int(s)

꼭 기억할 점

  • 문자가 숫자인지 아닌지 알아내는 함수 : isdigit()
    • true : 숫자
    • false : 문자
  • 문자열 교체 : replace()
    • 이 메서드의 바이트 배열 버전은 제자리에서 동작하지 않습니다 - 변경되지 않는 경우조차 항상 새 객체를 만듭니다.
profile
전 척척학사지만 말하는 감자에요

0개의 댓글