본문 바로가기
Problem Solving/Programmers

프로그래머스 숫자 문자열과 영단어 - 81301 [파이썬]

by JC_ 2023. 5. 9.

https://school.programmers.co.kr/learn/courses/30/lessons/81301

 

프로그래머스

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

programmers.co.kr

 

처음 접근 >> 리스트를 숫자와 문자 두개로 만들어 인덱스를 통한 접근으로 바꾸줘야겠다

 

def solution(s):
    answer = ""                     # 편하게 더하기 위해 str으로 바꿔준다.
    
    ## 두개의 리스트를 만들고 index를 통해 변경해주겠다.
    num = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
    string = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
    
    temp = ""                       # 빈 문자열을 선언해주고
    for i in s:                     # 문자열 s를 돌면 알파벳 하나하나 돈다.
        if i in num:                # 만약 i가 그냥 숫자면
            answer = answer + i     # 바로 붙여준다.
        else:                       # i가 숫자가 아니라 알파벳이면
            temp = temp + i         # temp에 누적하여 더해준다.
            if temp in string:      # string리스트 속에 temp가 들어있다면
                # 문자열로 변환(string리스트.리스트 속 인텍스 찾아(temp와 같은 위치의))
                answer = answer + str(string.index(temp))
                temp = ""           # temp는 사용했으니 다시 빈 문자열로 바꿔준다.
    
    answer = int(answer)            # return을 숫자형으로 해줘야 해
    return answer

 

문제를 풀고 해답을 찾아보니 dic와 replace()함수를 이용하여 더 편하게 접근이 가능했다.

 

def solution(s):

    answer = 0
    
    # replace를 사용하기 위한 dic 생성
    dic = {"zero" : "0", "one" : "1", "two" : "2", "three" : "3", "four" : "4", "five" : "5", "six" : "6", "seven" : "7", "eight" : "8", "nine" : "9"}
    for key in dic:                     # for문으로 dic를 돌면 key값들을 돌아
        # s에 key가 들어있다면, dic[key]에 해당하는 value값으로 바꿔줘
        s = s.replace(key, dic[key])    # 그런데 그냥 s.replace()만 사용하면 바뀌지는 않아 그래서 이를 다시 s에 저장해줘
    answer = int(s)                     # 아직 s가 문자열이니 int()로 변환해서 answer에 저장해줘
    
    return answer

댓글