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

yujeongkwon·2022년 1월 2일
0

문제 설명

  1. 다트 게임은 총 3번의 기회로 구성된다.
  2. 각 기회마다 얻을 수 있는 점수는 0점에서 10점까지이다.
  3. 점수와 함께 Single(S), Double(D), Triple(T) 영역이 존재하고 각 영역 당첨 시 점수에서 1제곱, 2제곱, 3제곱 (점수1 , 점수2 , 점수3 )으로 계산된다.
  4. 옵션으로 스타상(*) , 아차상(#)이 존재하며 스타상(*) 당첨 시 해당 점수와 바로 전에 얻은 점수를 각 2배로 만든다. 아차상(#) 당첨 시 해당 점수는 마이너스된다.
  5. 스타상(*)은 첫 번째 기회에서도 나올 수 있다. 이 경우 첫 번째 스타상(*)의 점수만 2배가 된다. (예제 4번 참고)
  6. 스타상(*)의 효과는 다른 스타상(*)의 효과와 중첩될 수 있다. 이 경우 중첩된 스타상(*) 점수는 4배가 된다. (예제 4번 참고)
  7. 스타상(*)의 효과는 아차상(#)의 효과와 중첩될 수 있다. 이 경우 중첩된 아차상(#)의 점수는 -2배가 된다. (예제 5번 참고)
  8. Single(S), Double(D), Triple(T)은 점수마다 하나씩 존재한다.
  9. 스타상(*), 아차상(#)은 점수마다 둘 중 하나만 존재할 수 있으며, 존재하지 않을 수도 있다.
0~10의 정수와 문자 S, D, T, *, #로 구성된 문자열이 입력될 시 총점수를 반환하는 함수를 작성하라.

입력 형식
"점수|보너스|[옵션]"으로 이루어진 문자열 3세트.
예) 1S2D*3T

점수는 0에서 10 사이의 정수이다.
보너스는 S, D, T 중 하나이다.
옵선은 *이나 # 중 하나이며, 없을 수도 있다.
출력 형식
3번의 기회에서 얻은 점수 합계에 해당하는 정수값을 출력한다.
예) 37

숫자 10 때문에 골이 조금 아팠다. 10이 있다는 것을 모르고 ( 두자리 수 ) dartResult 문자열 하나씩 읽으면서 했었는데 10 때문에 숫자만 따로 끄집어 내고 알파벳이 나올때만 count 를 세줘서 "*"을 계산하기 위해 전작업을 해주었다.

else 부분에서 하나씩 -1 해준 이유는 앞에서 알파벳이 나왔을 때 다음 기회로 넘어가게 작성했기 때문에(count++) 알파벳 다음에 나오는 "*" 이나 "#" 은 하나씩 줄여서 봐주어야 한다.

내 코드

import math
import re
def solution(dartResult):
    answer = 0
    temp = re.findall("\d+", dartResult)
    for i in range(3):
        temp[i] = int(temp[i])
    #‘\d+’ : 숫자를 묶어서 list 로 반환
    count = 0

    for i in dartResult:
        if i.isalpha():
            if i == "S":
                answer += temp[count]
            elif i == "D":
                temp[count] = math.pow(temp[count],2)
                answer += temp[count]
            elif i == "T":
                temp[count] = temp[count] ** 3
                answer += temp[count]
            count += 1
        else :
            if i =="*":
                if count >1:
                    answer -= temp[count-1] + temp[count-2]
                    temp[count-1] = temp[count-1] *2
                    temp[count-2] = temp[count-2] *2
                    answer += temp[count-1] + temp[count-2]
                else:
                    answer -= temp[count-1]
                    temp[count-1] = temp[count-1] *2
                    answer += temp[count-1]
            elif i =="#":
                temp[count-1] = temp[count-1] *(-1)
                answer += temp[count-1] *2
    return answer
profile
인생 살자.

0개의 댓글