[백준 BOJ] 5800번 성적 통계 (C++/cpp)

2022. 7. 2. 02:05PS (Program Solving)/BOJ (백준)

문제 설명

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

 

5800번: 성적 통계

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

www.acmicpc.net

백준 BOJ 5800번 성적 통계 문제 사진

 

접근 방법 - 정렬 함수 사용의 기본 문제

백준의 5800번 문제는 정렬 함수 사용에 있어 기본적인 문제이다.

해당 문제는, 각 학반의 성적들에 대하여 최댓값, 최솟값, 가장 큰 점수 차이를 순차적으로 출력해야 하는 문제이다.

필자의 경우엔 실행시간을 줄이기 위해 입력을 받으면서 최댓값과 최솟값을 구해보았다.

그리고 입력을 모두 받은 뒤엔 정렬을 수행한 뒤 가장 큰 점수 차이를 구하도록 하였다.

코드에 대한 자세한 설명은 아래에서 계속 서술하고자 한다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 학반의 수(n)를 입력받는다.

 

2) n의 크기만큼 반복문을 실행하여 아래의 연산을 취한다.

- 학생의 수(num)를 입력받는다.

- 학생들의 성적을 입력받을 배열(score)을 선언한다.

그와 동시에, 최댓값과 최솟값 연산을 수행하기 위해 필요한 변수 max, min을 각각 0과 100으로 초기화하여 선언한다.

- score의 값들을 입력받으면서, 최댓값과 최솟값 연산을 수행한다.

(입력값이 max보다 큰 값을 가지고 있다면, max의 값에 해당 입력값을 저장한다.)

(반면에, 입력값이 min보다 작은 값을 가지고 있다면, min의 값에 해당 입력값을 저장한다.)

- score의 값들에 대하여 정렬을 수행한다.

- 가장 큰 점수 차이의 값을 저장할 변수 sub를 0으로 초기화하여 선언한다.

- 반복문을 통해 인접한 두 점수 차이의 가장 큰 값을 탐색한다. 큰 값이 발견되는 대로, 해당 값을 sub에 저장하도록 한다.

- 모든 연산이 끝났다면, 학반과 함께 max, min, sub의 값들을 양식에 맞게 출력하도록 한다.

 

3) 모든 학반의 성적 연산이 끝났다면, 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <algorithm>
#define endl '\n'
using namespace std;

//백준 5800번 코드
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		int num;
		cin >> num;
		int score[50];
		int max = 0;	int min = 100;
		for (int j = 0; j < num; j++) {
			cin >> score[j];
			if (max < score[j]) { max = score[j]; }
			if (min > score[j]) { min = score[j]; }
		}
		sort(score, score + num);
		int sub = 0;
		for (int j = 0; j < num - 1; j++) {
			if (score[j + 1] - score[j] > sub) {
				sub = score[j + 1] - score[j];
			}
		}
		cout << "Class " << i + 1 << endl;
		cout << "Max " << max << ", Min " << min << ", Largest gap " << sub << endl;
	}
}

 

제출 결과

백준 BOJ 5800번 성적 통계 문제 C++ 제출 결과

(2022.04.30 백준 5800번 문제 제출 결과)

반응형