본문 바로가기
문제 해결/BaekJoon

[백준] [C++] 5800번 성적 통계

by WSLim_97 2023. 1. 13.
반응형

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

 

5800번: 성적 통계

첫째 줄에 중덕 고등학교에 있는 반의 수 K (1 ≤ K ≤ 100)가 주어진다. 다음 K개 줄에는 각 반의 학생수 N (2 ≤ N ≤ 50)과 각 학생의 수학 성적이 주어진다. 시험 성적은 0보다 크거나 같고, 100보다

www.acmicpc.net


코드

#include <iostream>
using namespace std;

void Sort(int arr[], int count);
int FindMax(int arr[], int count);
int FindMin(int arr[], int count);
int FindLargeGap(int arr[], int count);

const int COUNT = 50;

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

	for (int i = 0; i < k; i++)
	{
		int max = -1;
		int min = 101;
		int largeGap = 0;

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

		Sort(arr, n);
		max = FindMax(arr, n);
		min = FindMin(arr, n);
		largeGap = FindLargeGap(arr, n);

		cout << "Class " << (i + 1) << endl;
		cout << "Max " << max << ", Min " << min << ", Largest gap " << largeGap << endl;
	}

	return 0;
}

void Sort(int arr[], int count)
{
	for (int i = 0; i < count; i++)
	{
		int max = -1;
		int maxIndex = 0;
		for (int j = i + 1; j < count; j++)
		{
			if (max < arr[j])
			{
				max = arr[j];
				maxIndex = j;
			}

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

int FindMax(int arr[], int count)
{
	int max = -1;
	for (int i = 0; i < count; i++)
	{
		if (arr[i] > max)
			max = arr[i];
	}

	return max;
}

int FindMin(int arr[], int count)
{
	int min = 101;
	for (int i = 0; i < count; i++)
	{
		if (arr[i] < min)
			min = arr[i];
	}

	return min;
}

int FindLargeGap(int arr[], int count)
{
	int largeGap = 0;
	for (int i = 1; i < count; i++)
	{
		int gap = arr[i - 1] - arr[i];
		if (largeGap < gap)
			largeGap = gap;
	}

	return largeGap;
}

풀이

각 반의 학생 수와 점수를 입력받아 최댓값, 최솟값 그리고 인접한 값의 차이가 가장 큰 값을 출력하는 문제이다.

 

먼저 입력받은 배열을 Sort 함수를 사용해 내림차순으로 정렬하였다.

 

내림차순으로 정렬한 뒤 FindMax, FindMin 함수를 사용해 최댓값과 최솟값을 찾는다.

 

인접한 두 수의 차이 중 가장 큰 값을 찾는 FindLargeGap 함수를 사용한다. 배열의 (i - 1) 인덱스와 i 인덱스를 비교해서 가장 큰 값을 찾게 하였다.

 

모든 값을 찾은 뒤 출력 예제에 맞게 값을 출력하였다.

반응형