본문 바로가기
Algorithm/🏫assignment

# Bowling 점수 계산하기

by yewoneeee 2022. 7. 9.

# 문제

# 입력 및 출력

# 풀이

#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("bowling.inp");
ofstream fout("bowling.out");

int input(int frame[10][2]) { 
	int bonus = 0;
	for (int i = 0; i < 9; i++) {
		fin >> frame[i][0];
		if (frame[i][0] == 10)continue;
		fin >> frame[i][1];
	}
	fin >> frame[9][0] >> frame[9][1];
	if (frame[9][0] + frame[9][1] >= 10) fin >> bonus;
	return bonus;
}

int strike(int frame[10][2],int n) {
	int bonus = 0;
	bonus += frame[n + 1][0] + frame[n + 1][1];
	if (n + 2 < 10 && frame[n + 1][0] == 10) bonus += frame[n + 2][0];
	return bonus;
}

int spare(int frame[10][2], int n) {
	int bonus = 0;
	bonus += frame[n + 1][0];
	return bonus;
}

int main() {
	int T;
	fin >> T;
	while (T--) {
		int frame[10][2] = { 0, }, bonus = 0, score = 0;
		bonus=input(frame);
		for (int i = 0; i < 9; i++) {
			score += (frame[i][0] + frame[i][1]);
            		// 보너스 점수 계산
			if (frame[i][0] == 10) score += strike(frame, i);
			else if (frame[i][0] + frame[i][1] == 10) score += spare(frame, i);
		}
		score += (frame[9][0] + frame[9][1] + bonus);
		fout << score << "\n";
	}
	fin.close();
	fout.close();
}

처음에 풀었을 땐 머릿속에 정리가 안돼서 엄청 복잡하게 풀었는데

너무 코드가 난잡해서 지우고 다시 한번 작성하면서 정리가 좀 됐다

핵심을 파악하고 조건문은 필요할때만 쓰자,,!

'Algorithm > 🏫assignment' 카테고리의 다른 글

# Interesting Gain  (0) 2022.09.11
# 계단 오르기  (0) 2022.09.09
# Spin And Slide  (0) 2022.09.04
# Test  (0) 2022.09.03
# 교차점 계산  (0) 2022.07.04

댓글