Notice
														
												
											
												
												
													Recent Posts
													
											
												
												
													Recent Comments
													
											
												
												
													Link
													
											
									| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | 
| 30 | 
													Tags
													
											
												
												- list 컬렉션
 - R
 - Algorithm
 - Serialization
 - JSON
 - 메모리구조
 - 윤성우의 열혈 자료구조
 - insertion sort
 - buffer
 - C programming
 - 혼자 공부하는 C언어
 - Stack
 - coding test
 - 알기쉬운 알고리즘
 - s
 - C 언어 코딩 도장
 - 이스케이프 문자
 - 이것이 자바다
 - 윤성우 열혈자료구조
 - stream
 - datastructure
 - Graph
 - Selection Sorting
 
													Archives
													
											
												
												- Today
 
- Total
 
Engineering Note
[KAKAO] 다트게임 본문
문제 : 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