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

안상철·2023년 5월 22일
0

문제링크

def solution(dartResult):
    
    # 10이 예외적으로 두 자리 숫자라서 한자리 문자로 표기해야 반복 시 꺼내기 쉬움
    dartResult = dartResult.replace('10', 'A')
    
    # 점수를 차례로 입력하기 위한 배열
    answer_list = []
    
    # 각 문자별 제곱근 저장 딕셔너리
    score_area = {'S':1, 'D':2, 'T':3}
    
    # 현재 점수를 계산
    cur_score = 0
    
    # 다트결과에서 하나씩 꺼내어 점수 및 로직을 계산
    for i, d in enumerate(dartResult):
    	
        # 꺼낸 값이 숫자거나 위에서 치환한 A일 때
        if d.isdigit() or d == 'A':
        	# 숫자를 넣거나 A를 10으로 치환해서
            cur_score = int(d) if d.isdigit() else 10
            
            # 현재 점수를 먼저 배열에 저장
            answer_list.append(cur_score)
            
        # S, D, T 문자열일 경우는 점수 배열의 가장 최신 값에 해당 값만급 제곱    
        elif d in score_area:
            answer_list[-1] **= score_area[d]
            
        # #이나 *일 경우는 점수 배열의 가장 최신값과 그 앞 값에 로직 추가
        elif d == '#':
            answer_list[-1] *= -1
        elif d == '*':
            answer_list[-1] *= 2
            if i > 2:
                answer_list[-2] *= 2
                    
    # 담긴 점수 배열을 모두 합해서 return
    return sum(answer_list)
profile
웹 개발자(FE / BE) anna입니다.

0개의 댓글