본문 바로가기

BAEKJOON/구현

백준 5800번 [성적 통계](C++)-yes6686- 티스토리

728x90
SMALL

백준 문제 풀이: 5800 [성적 통계]


문제 링크: https://www.acmicpc.net/problem/5800

문제 설명:

여러 반의 학생들의 성적이 주어졌을 때, 각 반마다 최고 점수, 최저 점수, 그리고 점수 간격 중 가장 큰 값을 계산합니다. 이를 통해 각 반의 성적 통계를 출력합니다.


문제 해결 코드


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

int arr[51];

int main() {
    int T;
    cin >> T; // 테스트 케이스 수
    int n;
    int x = 1;
    while (T--) {
        cin >> n; // 학생 수
        for (int i = 0; i < n; i++) {
            cin >> arr[i]; // 성적 입력
        }
        sort(arr, arr + n); // 성적 정렬

        int LargestGap = -1;
        for (int i = 0; i < n - 1; i++) {
            LargestGap = max(LargestGap, arr[i + 1] - arr[i]); // 최대 점수 차 계산
        }

        // 출력
        cout << "Class " << x << '\n';
        cout << "Max " << arr[n - 1] << ", Min " << arr[0] << ", Largest gap " << LargestGap << '\n';
        x++;
    }
}

코드 설명

  • 핵심 알고리즘: 정렬을 사용하여 점수 간격을 계산
  • 구현 세부사항:
    • 각 반의 점수를 정렬하여 최저점과 최고점을 계산
    • 인접 점수 간의 차이를 계산해 가장 큰 간격을 구함
  • 시간 복잡도: O(T × n log n)
    • n은 각 반의 학생 수
    • 정렬의 시간 복잡도는 O(n log n)

결과

각 반에 대해 성적 통계를 출력합니다. 최고 점수, 최저 점수, 그리고 가장 큰 점수 간격을 확인할 수 있습니다.

다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!

728x90
LIST