반응형
문제 링크
코드
#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를 열심히 하다 보면 인싸가 될 수 있을지도???
(주의) 기록용으로 작성한 글입니다. 좋은 코드가 아닐 수 있습니다.
댓글 환영합니다!
반응형
'Algorithm > BOJ' 카테고리의 다른 글
[백준/BOJ] 18258번 - 큐 2 (C++) (0) | 2022.03.26 |
---|---|
[백준/BOJ] 17210번 - 문문문 (C++) (0) | 2022.03.26 |
[백준/BOJ] 17211번 - 좋은 날 싫은 날 (C++) (0) | 2022.03.26 |
[백준/BOJ] 16435번 - 스네이크버드 (C++) (0) | 2022.03.26 |
[백준/BOJ] 15947번 - 아기 석환 뚜루루 뚜루 (C++) (0) | 2022.03.25 |
댓글