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

Tony Kim·2022년 1월 11일
0
post-thumbnail

[프로그래머스]

Lv.1 숫자 문자열과 영단어

1. 문제

영문으로된 숫자 (one two..)와 정수 (0~9)를 input으로 받아서 숫자를 output으로 return하는 문제

2. 풀이

input으로 받은 문자열의 index값을 하나씩 체크하면서 숫자로 변환시켜 return하는 방법을 생각함.

3. 코드

def solution(s):
    answer = '';
    i = 0;
    while i < len(s):
        if s[i].isalpha():
            if s[i] == 'z':
                answer += '0'
                i = i + 4
            elif s[i] == 'o':
                answer += '1'
                i = i + 3
            elif s[i] == 't':
                if s[i+1] == 'w':
                    answer += '2'
                    i = i + 3
                else:
                    answer += '3'
                    i = i + 5
            elif s[i] == 'f':
                if s[i+1] == 'o':
                    answer += '4'
                    i = i + 4
                else:
                    answer += '5'
                    i = i + 4
            elif s[i] == 's':
                if s[i+1] == 'i':
                    answer += '6'
                    i = i + 3
                else:
                    answer += '7'
                    i = i + 5
            elif s[i] == 'e':
                answer += '8'
                i = i + 5
            else:
                answer += '9'
                i = i + 4
        else:
            answer += s[i]
            i = i + 1
    return int(answer)

모범코드

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

모범코드2

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

문제점

  • 코드가 너무 길고 가독성이 떨어짐
  • dictionary를 사용할 생각을 하지 못한 것
  • dictionary -> .items(), .keys(), .values()
  • replace를 활용하지 못한 것
profile
Back-end-dev

0개의 댓글