볼링 게임의 점수를 계산해요.
볼링은 무거운 공을 굴려 삼각형으로 세워진 핀을 쓰러뜨리는 게임이에요. 볼링 게임의 점수를 기록하는 코드를 작성해요.
게임은 10개의 프레임으로 이루어져 있어요. 프레임은 처음에 핀 10개가 세워진 상태에서 한 번 또는 두 번 공을 던지는 것으로 이루어져 있어요. 프레임의 점수를 계산하는 데는 세 가지 경우가 있어요.
오픈 프레임은 해당 프레임에서 10점 미만의 점수가 기록되는 경우예요. 이때 프레임의 점수는 쓰러뜨린 핀의 개수예요.
스페어는 두 번째 투구로 핀 10개를 모두 쓰러뜨리는 경우예요. 스페어의 총점은 10에 다음 투구에서 쓰러뜨린 핀의 개수를 더한 값이에요.
스트라이크는 첫 번째 투구로 핀 10개를 모두 쓰러뜨리는 경우예요. 스트라이크의 총점은 10에 다음 두 번의 투구에서 쓰러뜨린 핀의 개수를 더한 값이에요. 스트라이크 바로 뒤에 두 번째 스트라이크가 나오면, 공을 한 번 더 던질 때까지 첫 번째 스트라이크의 점수를 정할 수 없어요.
다음은 세 프레임 예시예요.
| 프레임 1 | 프레임 2 | 프레임 3 |
|---|---|---|
| X (스트라이크) | 5/ (스페어) | 9 0 (오픈 프레임) |
프레임 1은 (10 + 5 + 5) = 20이에요.
프레임 2는 (5 + 5 + 9) = 19예요.
프레임 3은 (9 + 0) = 9예요.
따라서 현재 누적 총점은 48이에요.
게임의 10번째 프레임은 특별한 경우예요. 스페어나 스트라이크를 던지면 각각 한 번 또는 두 번의 추가 투구를 하게 돼요. 추가 투구는 10번째 프레임의 총점을 계산하기 위해 있어요. 추가 투구에서 스트라이크나 스페어를 기록해도 추가 투구를 더 받지는 않아요. 10번째 프레임의 총점은 쓰러뜨린 핀의 총개수예요.
10번째 프레임이 X1/(스트라이크와 스페어)라면 총점은 20이에요.
10번째 프레임이 XXX(세 번의 스트라이크)라면 총점은 30이에요.
볼링 게임의 점수를 기록하는 코드를 작성해요. 코드는 다음 두 가지 연산을 지원해야 해요.
roll(pins : int)는 플레이어가 공을 굴릴 때마다 호출돼요.
인자는 쓰러뜨린 핀의 개수예요.score() : int는 게임이 완전히 끝났을 때만 호출돼요.
해당 게임의 총점을 반환해요.