문제 해결/BaekJoon

[백준] [C++] 9076번 점수 집계

WSLim_97 2023. 1. 12. 20:22
반응형

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

 

9076번: 점수 집계

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

www.acmicpc.net


코드

#include <iostream>
using namespace std;

const int COUNT = 5;

void DeleteValue(int arr[], int count);
void Sort(int arr[], int count);

int main()
{
	int n, input;
	int arr[COUNT] = { };
	cin >> n;

	for (int i = 0; i < n; i++)
	{
		int sum = 0;
		for (int j = 0; j < COUNT; j++)
		{
			cin >> input;
			arr[j] = input;
		}

		DeleteValue(arr, COUNT);
		Sort(arr, COUNT);

		sum = arr[COUNT - 1] + arr[COUNT - 2] + arr[COUNT - 3];

		if (arr[COUNT - 1] - arr[COUNT - 3] >= 4)
			cout << "KIN" << endl;
		else
			cout << sum << endl;
	}

	return 0;
}

void DeleteValue(int arr[], int count)
{
	int max = -1, maxIndex = 0;
	int min = 11, minIndex = 0;

	for (int i = 0; i < count; i++)
	{
		if (max < arr[i])
		{
			max = arr[i];
			maxIndex = i;
		}
		if (min > arr[i])
		{
			min = arr[i];
			minIndex = i;
		}
	}

	arr[maxIndex] = 0;
	arr[minIndex] = 0;
}

void Sort(int arr[], int count)
{
	for (int i = 0; i < count; i++)
	{
		int min = 101, minIndex = 0;
		for (int j = i + 1; j < count; j++)
		{
			if (min > arr[j])
			{
				min = arr[j];
				minIndex = j;
			}

			if (j == count - 1 && arr[i] > arr[minIndex])
			{
				int temp = arr[i];
				arr[i] = arr[minIndex];
				arr[minIndex] = temp;
			}
		}
	}
}

풀이

5개의 점수를 입력받는다. 5개의 점수 중 최고점과 최저점을 제외하고 3개의 값을 더해 출력한다. 이때 남은 3개의 값에서 최고점과 최저점의 차이가 4보다 크거나 같다면 총점 대신 KIN (Keep In Negotiation)을 출력한다.

 

5개의 점수를 입력받아 배열에 입력한 뒤 DeleteValue 함수를 통해 최고점과 최저점을 찾아 그 점수를 0으로 바꾼다.

 

남은 3개의 점수를 Sort 함수에 입력하여 오름차순으로 정렬한 뒤 0이 아닌 점수 중 최고점과 최저점을 더해 KIN을 출력할지 말지 결정하고 KIN 또는 점수 합계를 출력하게 한다.

반응형