Engineering Note

[KAKAO] 다트게임 본문

Problem Solving/KAKAO

[KAKAO] 다트게임

Software Engineer Kim 2022. 1. 31. 09:40

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

해설

다트게임

-> 다트판에 다트를 세 차례 던져 그 점수 합계로 실력을 겨루는 게임

다트 게임 점수 계산 로직

1. 총 세번의 라운드로 진행된다.

2. 점수는 0~10점 중 하나다.

3. 보너스: 점수마다 하나씩 존재하는 보너스 계산이 있다.

S: 점수의 1제곱

D: 점수의 2제곱

T: 점수의 3제곱

4. 옵션: 점수마다 존재하지 않거나 존재한다면 하나씩만 존재하는 옵션

스타상(*): 해당 점수, 바로 직전 점수 각 2배

: 해당 라운드가 1라운드일 경우 직전라운드가 없으므로 해당 라운드 즉, 1라운드만 점수 2배

: 스타상은 중첩될 수 있다. ex) 1S*2D*3T 로 점수 배점이 매겨졌을 때 1라운드는 2라운드에서 받은 스타상과 중첩

아차상(#): 해당 점수 마이너스

: 스타상과 아차상이 중첩될 수 도 있다.

입력 형식

"점수|보너스|[옵션]"으로 이루어진 문자열 3세트

es) 1S2D*3T는 1S // 2D* // 3T 로 이루어진 문자열 3세트이다. 1세트 1S는 점수 1점에 보너스 S이다. 2세트는 점수 2점에 보너스 D 옵션 *으로 이루어져 있따. 3세트는 점수 3점에 보너스 T로 이루어져 있다.

이를 계산하면 37점이다. 계산방식은 아래의 그림 참조하면 된다.

코드

def solution(dartResult):
    answer = 0
    scores = [None]*3
    game_round = 0
    BONUS = ["S","D","T"]
    OPTION = ["*","#"]


    for dart in dartResult:
        if dart in "0123456789":
            if scores[game_round] == None:
                scores[game_round] = int(dart)
            else:
                scores[game_round] = scores[game_round]*10 + int(dart)

        if dart in BONUS:
            if dart == BONUS[1]:
                scores[game_round] = scores[game_round]**2
            elif dart == BONUS[2]:
                scores[game_round] = scores[game_round]**3

            game_round += 1

        if dart in OPTION:
            game_round -= 1

            if game_round == 0 and dart == OPTION[0]:
                scores[game_round] = scores[game_round]*2
            elif game_round != 0 and dart == OPTION[0]:
                scores[game_round] = scores[game_round]*2
                scores[game_round-1] = scores[game_round-1]*2

            if dart == OPTION[1]:
                scores[game_round] = -scores[game_round]

            game_round += 1



    return sum(scores)

'Problem Solving > KAKAO' 카테고리의 다른 글

[KAKAO] 크레인 인형뽑기 게임  (0) 2022.01.24
Comments