PS/프로그래머스

[Python] [1차] 다트 게임

s_omi 2024. 10. 27. 09:24

✏️ 문제

 

문제 파악

제일 처음 생각했던 게 점수는 0에서 10 사이의 정수로 한 칸을 차지할 수도 두 칸을 차지할 수도 있다.

그래서 점수 길이를 단정할 수 없으니 점수 하나당 S, D, T 하나가 나오게 되니까 S, D, T를 기준으로 앞에 오는 게 숫자라고 단정 짓는 게 맞다고 생각했다! 

(스타상 * 이나 아차상 # 도 점수 하나당 있을 수도 있고 없을 수도 있으니까 기준으로 삼을 수 없다.)

 

그리고 점수에 보너스까지 처리한 값을 바로 정답 변수에 넣을 수 없는 게 뒤에 스타상이 온다면 이전 점수에 2배를 해줘야 하기 때문이다.

그래서 점수는 배열에 각각 처리한 값을 넣어서 스타상이 나왔을 때 처리할 수 있게 해주어야 한다.

 

참고로 배열의 뒷 인덱스부터 요소에 접근할 때 다음과 같이 접근할 수 있다.

score[-1] *= 2  # 마지막 요소를 2배로
score[-2] *= 2  # 뒤에서 두 번째 요소를 2배로

 

 

코드

def solution(dartResult):
    answer = 0
    score = []
    s = ''
    
    for d in dartResult:
    	# 문자라면
        if (d == 'S'):
            score.append(int(s) ** 1)
            s = ''
        elif (d == 'D'):
            score.append(int(s) ** 2)
            s = ''
        elif (d == 'T'):
            score.append(int(s) ** 3)
            s = ''
        # 스타상 또는 아차상이라면
        elif (d == '*'):
            if (len(score) == 1):
                score[0] *= 2
            else:
                score[-1] *= 2
                score[-2] *= 2
        elif (d == '#'):
            score[-1] *= -1
        # 숫자라면
        else:
            s += d
            
    answer = sum(score)
    return answer

 

'PS > 프로그래머스' 카테고리의 다른 글

[Python] 실패율  (0) 2024.10.27
[Python] 9번 / 지폐 접기  (0) 2024.10.27
[Python] 추억 점수  (2) 2024.10.26
[Python] 덧칠하기  (1) 2024.10.26
[Python] 카드 뭉치  (0) 2024.10.26