본문 바로가기
알고리즘/프로그래머스

[1차] 다트 게임 (파이썬)

by 매화of사군자 2021. 7. 14.

문제를 읽은 후 생각

- 앞에서부터 하나씩 잘라 처리

- 숫자가 나오면 배열에 저장

- S, D, T, * ,#은 각 조건에 따라 처리

- 배열에 저장된 숫자의 합 == 정답

 

코드

더보기

def solution(dartResult):
    dartResult = list(dartResult)
    answer = 0
    arr = []
    while dartResult:
        tmp = dartResult.pop(0)
        try:
            num = int(tmp)
            if num == 1 and dartResult[0] == '0':
                dartResult.pop(0)
                arr.append(10)
            else:
                arr.append(num)
        except:
            if tmp == 'S':
                arr[-1] = arr[-1] * 1
            elif tmp == 'D':
                arr[-1] = arr[-1] ** 2
            elif tmp == 'T':
                arr[-1] = arr[-1] ** 3
            elif tmp == '*':
                if len(arr) == 1:
                    arr[-1] = arr[-1] * 2
                else:
                    arr[-1] = arr[-1] * 2
                    arr[-2] = arr[-2] * 2
            elif tmp == '#':
                arr[-1] = -arr[-1]
    answer = sum(arr)
    return answer

 

회고

- 숫자 10을 처리하지 않아서 한 번 틀렸었다. 앞에서부터 하나씩 잘라 처리하였기 때문에 발생한 문제였다. 따라서 만일 숫자 1이 나온다면 다음 문자를 탐색하여 0인 경우 10으로 처리해주었다.

- 다른 사람들의 풀이를 보니 정규식으로 푸신 분들이 있던데 편리해보였다. 현재로는 이렇게 처리하는 것이 내 수준에는 맞는 풀이지만 나중에 한 번 정규식을 공부 할 필요를 느꼈다.

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

더 맵게 level2  (0) 2021.07.24
오픈채팅방 level2  (0) 2021.07.23
기능개발 - level2  (0) 2021.07.21
짝지어 제거하기  (0) 2021.07.20
숫자 문자열과 영단어 (파이썬)  (0) 2021.07.13

댓글