Algorithm/프로그래머스

[프로그래머스/Python] 다트게임

poppy 2021. 5. 19. 12:23
반응형

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

 

코딩테스트 연습 - [1차] 다트 게임

 

programmers.co.kr

def solution(dartResult):
    bonus = {'S':1, 'D':2, 'T':3}
    answer = []
    
    dartResult = dartResult.replace('10','k') # 10을 k로 바꿈
    dartResult = ['10' if i == 'k' else i for i in dartResult] # 리스트로 저장
    
    # 점수 합계 계산
    i = -1
    for d in dartResult:
        if d in 'SDT' :
            answer[i] = answer[i] ** bonus[d]
        elif d == '*':
            answer[i] = answer[i] * 2
            if i != 0 :
                answer[i - 1] = answer[i - 1] * 2
        elif d == '#':
            answer[i] = answer[i] * (-1)
        else:
            answer.append(int(d))
            i += 1
               
    return sum(answer)

점수가 1이상 10이하이므로 점수가 10일 경우를 처리해주기 위해서 dartResult에 10이 있는 경우 k로 대체해줍니다. 요소 하나하나를 리스트로 저장하는데 k는 10으로 바꿔서 저장해줍니다. 그 다음 for문을 돌면서 각 케이스마다 처리를 해줍니다. d가 숫자이면 else의 경우에 들어가는데 answer에 값을 저장합니다. d가 SDT 중 하나이면 이전에 저장해놨던 숫자를 가져와 점수를 계산해서 저장합니다. d가 #인 경우에는 해당 점수만 차감하면 되므로 현재 점수를 가져와 곱하기 -1하여 저장합니다. d가 *인 경우에는 해당 점수를 2배 해서 저장합니다. 첫번째 기회에서 *일 경우에는 해당 점수만 2배하면 끝이지만 두번째 기회부터는 이전 점수도 2배해줘야 하므로 조건을 하나 더 추가하여 이전 점수를 2배하여 저장합니다. 마지막으로 리턴할 때 answer의 모든 요소를 더한 값을 구해서 리턴해줍니다.

반응형