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

Jin Lee·2022년 4월 29일
0

프로그래머스 Lv.1

목록 보기
31/32
post-thumbnail

문제 링크

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

원시적으로 풀었는데 들어올 수 있는 값이 명확히 정해져 있어서 이렇게 풀어도 되긴 한다. 2,000,000,000 이하의 정수가 리턴값이라고 주어졌고 각 자리수별로 비교한다고 하면 10번이고 while 문 내 조건이 10개이기 때문에 자리수 변환에 최악은 100번으로 시간복잡도가 크지 않다. 뒤 부터 비교하고 잘라내 버리는 방식을 이용하였기 때문에 리스트가 재배열 되는데 낭비되는 시간도 없다.(앞부터 비교해도 자르지 않고 다음 비교 지점을 지정하는 방식으로 사용하면 비슷한 결과)

사실 좋은 코드는 아니라고 생각하는게 편의상 zero부터 확인하지만 비교하려는 글자수가 잘라보려는 글자수보다 부족 할 수도 있다. python은 언어 특성상 이부분에 대한 방어가 되어 있지만 [참고] 다른 언어로 구현하려면 조금 더 주의해야 할 것 같다.

def solution(s):
    numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
    answer = []

    while len(s) > 0:
        if s[-4:] == numbers[0]:
            s = s[:-4]
            answer.append('0')
        elif s[-3:] == numbers[1]:
            s = s[:-3]
            answer.append('1')
        elif s[-3:] == numbers[2]:
            s = s[:-3]
            answer.append('2')
        elif s[-5:] == numbers[3]:
            s = s[:-5]
            answer.append('3')
        elif s[-4:] == numbers[4]:
            s = s[:-4]
            answer.append('4')
        elif s[-4:] == numbers[5]:
            s = s[:-4]
            answer.append('5')
        elif s[-3:] == numbers[6]:
            s = s[:-3]
            answer.append('6')
        elif s[-5:] == numbers[7]:
            s = s[:-5]
            answer.append('7')
        elif s[-5:] == numbers[8]:
            s = s[:-5]
            answer.append('8')
        elif s[-4:] == numbers[9]:
            s = s[:-4]
            answer.append('9')
        else:
            temp = s[-1]
            s = s[:-1]
            answer.append(temp)
    
    answer.reverse()
    answer = ''.join(answer)
    answer = int(answer)
    print(answer)
        
    return answer
profile
깃허브 : https://github.com/jinlee9270

0개의 댓글