다트 점수 계산
시간 제한1초메모리 제한128 MB
301 다트 게임을 던진 순서대로 시뮬레이션하며, 더블로 점수 시작, 버스트, 더블로 마무리하는 규칙을 처리한다.
문제
다트는 다트판에 다트를 던지는 경기입니다. 다트판은 1번부터 20번까지 번호가 매겨진 20개의 구역으로 나뉩니다. 각 구역에는 싱글(single), 더블(double), 트리플(triple) 득점 영역이 있어, 예를 들어 5번 구역에 맞으면 다트가 꽂힌 영역에 따라 5점, 10점, 15점을 얻습니다. 다트판 중앙에는 두 개의 동심원이 있는데, 안쪽의 불즈아이(bull's eye)는 50점, 바깥쪽의 아우터 불(outer bull)은 25점입니다.
301 게임은 두 선수가 번갈아 가며 다트 세 개씩을 던지는 방식으로 진행됩니다. 두 선수 모두 301점에서 시작하며, 점수는 0을 향해 줄어듭니다.
득점 시작. 각 선수의 점수는 그 선수가 처음으로 더블을 맞히기 전까지는 계산되지 않습니다(불즈아이도 더블로 칩니다). 첫 더블을 맞히기 전에 던진 다트는 모두 0점으로 처리됩니다.
턴에서의 점수 차감. 한 턴에서 선수는 최대 세 개의 다트를 던집니다. 점수로 인정되는 각 다트의 값은 던진 순서대로 하나씩, 턴을 시작할 때의 점수에서 차감됩니다.
종료와 버스트(bust). 이기려면 더블에 해당하는 다트로 점수를 정확히 0으로 만들어야 합니다. 진행 중 점수가 2 미만으로 떨어지는 순간 그 턴은 즉시 끝나며 더 이상 다트를 던지지 않습니다. 턴이 끝날 때:
- 점수가 정확히 0이고 마지막 다트가 더블이었다면 그 선수가 이기고 게임이 끝납니다.
- 그렇지 않으면 버스트로, 그 턴은 무효가 되고 점수는 턴을 시작할 때의 값으로 되돌아갑니다.
예를 들어 턴을 시작할 때 점수가 10이라고 합시다. 이때는 더블 5를 노려 게임을 끝내야 합니다. 만약 트리플 3(9점), 싱글 9, 싱글 10, 또는 10보다 큰 값을 던지면 진행 점수가 각각 1, 더블이 아닌 0, 음수가 되어 모두 2 미만이 되므로 턴이 끝나고 점수는 10으로 유지됩니다. 그보다 작은 값을 던지면 그 값은 일단 차감되고, 여전히 더블로 마무리하려 시도하며 계속 던집니다. 성공하면 이기고, 성공하지 못한 채 점수가 2 미만으로 떨어지면 턴이 끝나며 점수는 다시 10으로 돌아갑니다.
라운드는 첫 번째 선수가 한 턴을 던지고 이어서 두 번째 선수가 한 턴을 던지는 것으로 이루어집니다. 이러한 게임들의 점수를 계산하는 프로그램을 작성하세요.
입력
입력은 여러 게임의 정보로 이루어집니다. 각 게임은 한 줄 이상에 걸친 다트 던지기의 나열입니다. 게임의 마지막 줄을 제외한 모든 줄에는 정확히 10개의 던지기가 들어 있으며, 각 던지기는 지정자 뒤에 쉼표가 붙는 형태입니다. 던지기 지정자는 다음 중 하나입니다.
S,D,T뒤에 1부터 20까지의 숫자 — 해당 구역의 싱글, 더블, 트리플.- 불즈아이를 뜻하는
B, 또는 아우터 불을 뜻하는OB. - 다트가 빗나간 경우(0점)를 뜻하는
M. - 게임의 끝을 나타내는
#.
전체 게임들의 나열은 # 하나만 있는 줄로 끝납니다.
출력
각 게임마다 여러 줄을 출력합니다. 첫 줄은 단어 Game, 공백 하나, 그리고 게임 번호(1부터 시작하는 일련번호)입니다. 그다음에는 라운드마다 한 줄씩, 그 라운드가 끝난 시점의 두 점수를 출력합니다. 게임은 비어 있는 0번째 라운드에서 시작한다고 보므로, 첫 점수 줄은 항상 301 301입니다.
각 점수는 너비 5의 칸에 오른쪽 정렬로 출력하며, 왼쪽 칸은 첫 번째 선수, 오른쪽 칸은 두 번째 선수의 점수입니다. 마지막 줄에서는 이긴 선수의 칸에 단어 Wins를 너비 5 칸에 오른쪽 정렬로 출력하고, 진 선수의 칸에는 그 점수를 출력합니다. 이어지는 게임들은 빈 줄 하나로 구분합니다.