Patrick's Devlog

[BOJ/C++] 성적 통계(5800번) 본문

Study/Algorithms Practice

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

Patrick_ 2022. 9. 23. 19:36

1. 개요

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

 

5800번: 성적 통계

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

www.acmicpc.net

1-1. 설명

 한 고등학교 각 반의 학생들의 수학 시험 성적이 주어졌을 때 최대점수, 최소점수, 점수차이를 구하는 프로그램을 작성한다. 

1-2. 제한 사항

 - 첫줄은 고등학교 반의 수 K가 주어지며, 1 이상 100 이하

 - K개 줄에는 각 반의 학생수 N과 각 학생 수학 성적이 이루어짐

 - N은 2 이상 50 이하이며 성적은 0 이상 100 이하 정수


2. 구현

2-1. 풀이

최댓값과 최솟값은 입력을 받을때 같이 비교해주었다. 점수 차이는 내림차순이라는 가정하에 진행을 해야하므로, sort를 통해 내림차순으로 정렬하고 하나씩 비교하여 저장하였다. 

2-2. 코드

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

int students[51];

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    int K, N, maxNum, minNum, maxGap;
    cin >> K;
    for (int i = 0; i < K; i++) {
        cin >> N;
        maxGap = 0;
        for (int j = 0; j < N; j++) {
            cin >> students[j];
            if (j == 0) {
                maxNum = students[j];
                minNum = students[j];
            }
            else {
                if (maxNum < students[j]) maxNum = students[j];
                else if (minNum > students[j]) minNum = students[j];
            }
        }
        sort(students, students + N, greater<int>());
        for (int j = 0; j < N - 1; j++) {
            int curGap = students[j] - students[j + 1];
            if (maxGap < curGap) maxGap = curGap;
        }
        cout << "Class " << i + 1 << "\n";
        cout << "Max " << maxNum << ", Min " << minNum << ", Largest gap " << maxGap << "\n";
    }
    return 0;
}