본문 바로가기
Problem Solving/Programmers

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

by Bokoo14 2023. 12. 14.
  1. 코딩테스트 연습 > 2021 카카오 채용연계형 인턴십 > 숫자 문자열과 영단어
  2. https://school.programmers.co.kr/learn/courses/30/lessons/81301
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

  •  

코드

numberString = {'zero': '0', 'one': '1', 'two': '2', 'three': '3', 'four': '4', 'five': '5','six': '6','seven': '7', 'eight': '8','nine': '9'}

def solution(s):
    answer = 0
    stringanswer = ''
    tmpword = ''
    for word in s:
        if ord(word)>=97 and ord(word)<=122: # 문자라면
            tmpword+=word
            if tmpword in numberString:
                stringanswer += numberString[tmpword]
                tmpword = ''
        else: # 숫자라면
            stringanswer += str(word)
            
    answer = int(stringanswer)
    return answer

풀이

input을 돌면서 아스키코드를 사용해

문자열이라면? tmpword에 append해줌 -> 문자열만 뽑아내기

하나의 숫자를 가르키는 문자가 완성이 되었다면 stringanswer에 append해줌

숫자라면? stringanswer에 append해줌

 

input을 모두 순회하며 문자열인지 숫자인지 check하는 것이 solution

단점: 문자열을 계속 돌며 아스키코드로 변환해주며 문자인지 check해주는 것이 시간 소모, 임의의 변수에 계속할당해주는 것이 메모리 낭비

 

개선된 코드

def solution(s):
    eng_num = {
        "zero" : "0",
        "one" : "1",
        "two" : "2",
        "three" : "3",
        "four" : "4",
        "five" : "5",
        "six" : "6",
        "seven" : "7",
        "eight" : "8",
        "nine" : "9"
    }
    
    # s 문자열안에 숫자영단어 있으면 숫자로 바꿔주기
    for eng, num in eng_num.items():
        if eng in s:
            s = s.replace(eng, num)
    
    return int(s)

풀이

딕셔너리 타입을 활용하여 key와 value값을 각각 eng과 num변수에 할당해줌

딕셔너리를 돌며, key값(영어 문자)이 input에 존재한다면 replace해줌 (영어 문자를 숫자로 / eng -> num)