반응형
코딩하기 전 생각하기
/*
크기가 10인 점수판 배열을 선언하자.
10번의 프레임이 채워질 때 까지 반복한다.
'-' 일 때 계산의 편의를 위해 값을 '0'으로 바꾸자.
숫자일 때, 'P'일 때, 'S'일 때를 나눠서 점수를 계산한다.
규칙이 복잡하므로 디버깅을 해보면서 코드를 짜보자.
점수판의 점수를 다 더하고 출력한다.
*/
코드
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main() {
int score[10] = {0,};
string s;
cin >> s;
int frame = 0; // 0일 때 1번째 프레임, 1일 때 2번째 프레임
int times = 0; // 0일 때 1번째 시도, 1일 때 2번째 시도
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++ ) {
//cout << i+1 << ":\t" << score[i] << '\n'; //DEBUG
score_sum += score[i];
}
cout << score_sum;
}
느낀점
마지막 프레임을 구현하기가 까다로웠다.
얼렁뚱땅 무식하게 푼 거 같은데 다른 풀이들을 보고 오니까 내 코드도 괜찮은 거 같다.
백준 덕분에 인싸들의 놀이인 볼링에 대해서 알 수 있었는데..
문제 열심히 풀다보면 인싸가 될 수 있을지도???
(주의) 기록용으로 작성한 글입니다. 코드가 허접하거나 알고리즘의 효율이 낮을 수 있습니다.
댓글 환영합니다!
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준/BOJ] 10814번 - 나이순 정렬 (C++) (2) | 2021.07.15 |
---|---|
[백준/BOJ] 1755번 - 숫자놀이 (C++) (0) | 2021.07.15 |
[백준/BOJ] 1431번 - 시리얼 번호 (C++) (0) | 2021.07.13 |
[백준/BOJ] 10867번 - 중복 빼고 정렬하기 (파이썬) (0) | 2021.07.13 |
[백준/BOJ] 11866번 - 요세푸스 문제 0 (C++) (0) | 2021.07.12 |
댓글