Patrick's Devlog

[BOJ/C++] 점수 집계(9076번) 본문

Study/Algorithms Practice

[BOJ/C++] 점수 집계(9076번)

Patrick_ 2022. 7. 7. 19:30

1. 문제 개요

https://www.acmicpc.net/problem/9076

 

9076번: 점수 집계

입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 한 줄에 다섯 심판이 준 점수 다섯 개의 정수 Ni(1 ≤ Ni ≤ 10, i = 1, 2, ..., 5)가 하나의 공백을 사이에 두고

www.acmicpc.net

1-1. 설명

한국 체조협회는 심판의 오심을 막기 위해 점수 집계 시스템을 고치기로 한다. 이전에는 5명의 심판이 1점부터 10점까지 정수의 점수를 주면 최고점과 최저점을 하나씩 제외한 점수의 합을 총점으로 하였다. 이를 보완하기 위해 최저점, 최고점을 뺀 3명 점수의 최고점과 최저점 차이가 4점이상 나게되면 점수 조정을 거쳐서 다시 점수를 매기려한다. 점수를 집계해 총점을 계산하거나, 점수 조정을 거쳐 다시 점수를 매기려는 경우 총점 대신 KIN을 출력한다. 

1-2. 제한 사항

 - 첫줄에는 테스트 케이스의 개수가 주어지며, 이는 1이상 10이하

 - 각 테스트 케이스는 한줄에 다섯 심판이 준 다섯개의 정수 N이 주어짐

 - N은 1이상 10이하


2. 구현

2-1. 풀이

벡터로 받아 sort를 통해 오름차순으로 정렬해주고, 네번째와 두번째가 최고점, 최저점이므로 둘을 빼주고 4점 이상이면 KI을 출력한다. 4점 미만이면 합을 구해 출력한다. 

2-2. 코드

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
using namespace std;


int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	
	int T, input;
	cin >> T;
	for (int i = 0; i < T; i++) {
		vector<int> numbers;
		for (int j = 0; j < 5; j++) {
			cin >> input;
			numbers.push_back(input);
		}
		sort(numbers.begin(), numbers.end());
		int result = numbers[3] - numbers[1];
		if (result >= 4) cout << "KIN\n";
		else cout << accumulate(numbers.begin() + 1, numbers.end() - 1, 0) << "\n";
	}
}