담배팔이소년
[BOJ] 17215 볼링 점수 계산 본문
https://www.acmicpc.net/problem/17215
17215번: 볼링 점수 계산
첫째 줄에 각 기회마다 소현이가 쓰러뜨린 볼링핀의 개수가 공백없이 주어진다. 이때 스트라이크는 S, 스페어는 P, 핀을 하나도 못 쓰러뜨린 것은 -으로 주어진다.
www.acmicpc.net
package boj;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class MainB_17215 {
public static void main(String[] args) throws Exception{
System.setIn(new FileInputStream("input/boj/input_17215.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int frames[] = new int[11];
int pins[] = to_frame(br.readLine(), frames);
int ans = calc_score(frames, pins);
System.out.println(ans);
br.close();
}
static int calc_score(int[] frames, int[] pins) {
int ret = 0;
for(int i=0; i<9; i++) {
int frame_score = (frames[i] > 0)? 10 : (pins[2*i] + pins[2*i +1]);
int bonus_score = 0;
int next_idx = 2*(i+1);
for(int j=0; j<frames[i]; j++) {
if(pins[next_idx] == -1) next_idx++;
bonus_score += pins[next_idx++];
}
ret += frame_score;
ret += bonus_score;
}
for(int i=18; i<21; i++) ret += (pins[i] >= 0)? pins[i] : 0;
return ret;
}
static int[] to_frame(String line, int[] frames) {
int[] ret = new int[22];
int ridx = 0;
for(int i=0; i<line.length(); i++) {
char temp = line.charAt(i);
if(temp == 'S') {
ret[ridx++] = 10;
if(ridx/2 < 9) ret[ridx++] = -1;
frames[(ridx-1)/2] = 2;
}
else if(temp == 'P') {
ret[ridx++] = (10 - ret[ridx-2]);
frames[(ridx-1)/2] = 1;
}
else if(temp == '-') {
ret[ridx++] = 0;
}
else {
ret[ridx++] = temp - 48;
}
}
for(int i=ridx; i<21; i++) {
ret[i] = -1;
}
return ret;
}
}
'Algorithm' 카테고리의 다른 글
[BOJ] 17143 낚시왕 (0) | 2023.01.07 |
---|---|
[BOJ] 22251 빌런 호석 (0) | 2023.01.06 |
[BOJ] 17070 파이프 옮기기 1 (0) | 2023.01.03 |
[BOJ] 07682 틱택토 (0) | 2023.01.03 |
[Softeer] [인증평가(3차) 기출] 플레이페어 암호 (0) | 2023.01.01 |
Comments