눈송이의 개발생활

[Programmers Lv.1]다트 게임 (Python) 본문

Algorithm/Programmers

[Programmers Lv.1]다트 게임 (Python)

꾸지새미언니

문제

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

내 코드

def solution(dartResult):
    dartResult = dartResult.replace('10', 'k')
    bonus = {'S': 1, 'D': 2, 'T': 3}
    temp = []

    for i in dartResult:
        if i.isdigit():
            temp.append(int(i))
        elif i == 'k':
            temp.append(10)
        elif i in bonus:
            temp[-1] = temp[-1] ** bonus[i]
        elif i == '#':
            temp[-1] *= -1
        elif i == '*':
            temp[-1] *= 2
            if len(temp) > 1:
                temp[-2] *= 2

    return sum(temp)

해결 방법

사실 이 문제는 혼자 해보다가 잘 안돼서 질문글을 참고해서 풀었다... 

10을 해결하는게 어려웠는데, replace를 통해서 한 글자로 바꾸고 그 뒤에 계산을 하는 아이디어를 다른 사람의 풀이에서 얻었다. 

S, D, T의 경우를 다 나누지 않고 딕셔너리에 넣어 풀면 더 쉽다는 것도 배웠다. 

또한 '*'이 까다롭다고 생각했었는데, '#'와 함께 있는 것도 따로 보려고 해서 더 어렵게 느꼈던 것 같다. 

'#'와 '*'가 함께 오는 경우라도, '*'이 오기 전에도 stack에 숫자가 남아 있으면 2배를 해주면 동시에 해결된다는 것을 나중에야 볼 수 있었다. 

어려운 문제는 아니지만 생각하는 힘이 더 필요하다고 느꼈다. 

 

 

Comments