Coding Test

[프로그래머스] [1차] 다트 게임

상상쓰 2021. 8. 31. 11:37

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

 

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

 

programmers.co.kr

 

주어진 다트 점수 중 'S' 는 '**1', 'D' 는 '**2', 'T' 는 '**3' 과 같이 '*' 와 '#' 도 마찬가지로 문제에서 주어진 환산 방식을 참고하여 수식으로 된 문자열로 바꿔준다.

 

reduce 와 eval 함수를 통해 구한 점수의 합을 구한다.

 

from functools import reduce

def solution(dartResult):
    answer = 0
    score = ''
    bonus = {'S' : '**1' , 'D' : '**2', 'T' : '**3'}
    result = []
    
    for i in dartResult:
        if i not in ['S', 'D', 'T', '*', '#']:
            score += i
        else:
            if i in ['S', 'D', 'T']:
                score += bonus[i]
                result.append(score)
                score = ''
            else:
                if i == '*':
                    result[-1] += '*2'
                    
                    if len(result) > 1: result[-2] += '*2'
                else:
                    result[-1] += '*(-1)'

    answer = int(reduce(lambda x, y : str(eval(x) + eval(y)), result))
    
    return answer

print(solution('1S2D*3T')) # 37