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

2-pi-r·2022년 7월 16일
0

알고리즘

목록 보기
3/9
post-thumbnail

문제

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

풀이

성적을 입력받아서 int 배열에 저장하고,
정렬해서 최대 최소 구하고,
인접한 점수 차 중 최댓값 구하고,
바로바로 출력했다.
이걸 K번 반복.

어려웠던 점

인접한 점수 차가 arr[i - 1] - arr[i]인데, (∵내림차순 정렬)
나도 모르게 오름차순으로 생각하고 arr[i] - arr[i - 1]으로 썼다.

코드

#include <iostream>
#include <algorithm>

using namespace std;

int main(){
    int K; cin>>K;
    int arr[51];

    for(int k = 1; k<=K; k++){ //K번 반복
        int N; cin >> N;
        for(int i = 0; i < N; i++){
            cin >> arr[i];
        }      

        sort(arr, arr+N, greater<int>()); //내림차순 정렬
        
        cout << "Class " << k << endl;
        cout << "Max " << arr[0] << ", ";
        cout << "Min " << arr[N - 1] << ", ";     

        int gap, largest = 0; //gap: 인접한 점수 차, largest: gap의 최댓값
        for(int i = 1; i < N; i++){
            gap = arr[i - 1] - arr[i];
            if(largest < gap)
                largest = gap;
        }
        cout << "Largest gap " << largest << endl;
    }

    return 0;
}

0개의 댓글