본문 바로가기
Algorithm/BOJ

[백준/BOJ] 17215번 - 볼링 점수 계산 (C++)

by shine-jung 2022. 3. 26.
반응형

문제 링크


코드

#include <bits/stdc++.h>
using namespace std;

int score[10];
int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);
    string s;
    cin >> s;
    int frame = 0, times = 0;
    int i = 0, max_times = 2;
    while (frame < 10) {
        if (frame == 9) {
            if (times == 0 && s[i] == 'S') max_times = 3;
            if (times == 1 && s[i] == 'P') max_times = 3;
        }
        if (s[i] == '-') s[i] = '0';
        if (s[i] >= '0' && s[i] <= '9') {
            if (times <= 1 && (i > 1 && s[i-2] == 'S'))
                score[frame-1] += s[i] - '0';
            if (times == 0 && (i > 0 && (s[i-1] == 'S' || s[i-1] == 'P')))
                score[frame-1] += s[i] - '0';
            score[frame] += s[i] - '0';
            times++;
        }
        if (s[i] == 'P') {
            if (times <= 1 && (i > 1 && s[i-2] == 'S'))
                score[frame-1] += 10 - (s[i-1] - '0');
            score[frame] += 10 - (s[i-1] - '0');
            times++;
        }
        if (s[i] == 'S') {
            if (times <= 1 && (i > 1 && s[i-1] == 'S' && s[i-2] == 'S'))
                score[frame-2] += 10;
            if (times == 0 && (i > 0 && (s[i-1] == 'S' || s[i-1] == 'P')))
                score[frame-1] += 10;
            score[frame] += 10;
            if (frame == 9) times++;
            else times+=2;
        }
        if (times >= max_times) {
            frame++;
            times = 0;
        }
        i++;
    }
    int score_sum = 0;
    for (i = 0; i < 10; i++)
        score_sum += score[i];
    cout << score_sum;
}



설명

크기가 10인 점수판 배열을 선언하자.
10번의 프레임이 채워질 때까지 반복한다.
    '-' 일 때 계산의 편의를 위해 값을 '0'으로 바꾸자.
    숫자일 때, 'P'일 때, 'S'일 때를 나눠서 점수를 계산한다.
    규칙이 복잡하므로 디버깅을 해보면서 코드를 짜 보자.
점수판의 점수를 다 더하고 출력한다.

마지막 프레임을 구현하기가 까다로웠다.

백준 덕분에 인싸들의 놀이인 볼링에 대해서 알 수 있었는데..

PS를 열심히 하다 보면 인싸가 될 수 있을지도???




(주의) 기록용으로 작성한 글입니다. 좋은 코드가 아닐 수 있습니다.

댓글 환영합니다!


반응형

댓글