알고리즘 풀이/프로그래머스

[Level 1] 숫자 문자열과 영단어

mhko411 2021. 7. 31. 10:35
728x90

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

 

코딩테스트 연습 - 숫자 문자열과 영단어

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자

programmers.co.kr


접근

숫자에 대한 영단어를 리스트에 저장하여 활용한다.

입력받은 문자열을 순차적으로 탐색하여 숫자일 때는 그대로 최종해에 추가하고 영문일 때는 임시로 저장하는 문자에 추가한다. 이 문자가 리스트안에 포함되어있을 때 해당 문자의 인덱스를 반환하고 문자열로 변환하여 최종해에 추가한다.

 

구현

- numbers라는 리스트에 인덱스는 숫자 값에는 인덱스에 해당하는 영문을 저장한다.

- while문을 통해 입력받은 s를 순차적으로 탐색한다.

- 현재 문자가 숫자일 때는 answer에 바로 추가하고

- 아닐 때는 c에 문자를 추가하고 c가 numbers에 있을 때 c의 인덱스를 반환하고

- 반환한 숫자를 문자열로 변환하여 answer에 추가한다.

def solution(s):
    answer = ''
    N = len(s)
    numbers = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
    idx = 0
    c = ''
    while idx < N:
        if s[idx].isdigit():
            c = ''
            answer += s[idx]
        else:
            c += s[idx]
            if c in numbers:
                number = numbers.index(c)
                answer += str(number)
                c = ''
        idx += 1
    answer = int(answer)
    return answer

다른 사람의 풀이

딕셔너리와 replace()를 활용할 수 있었다. 딕셔너리에 영문을 key, 숫자를 value로 저장하여 이를 순차적으로 탐색하여 replace()로 해당 영문이 있을 때 숫자로 변경한다.

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

'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글

[Level 1] 실패율  (0) 2021.08.03
[Level 1] 키패드 누르기  (0) 2021.07.31
[Level 2] 괄호 회전하기  (0) 2021.06.15
[Level 3] 베스트 앨범  (0) 2021.06.07
[Level 2] 게임 맵 최단거리  (0) 2021.06.07