백준 5800번: 성적 통계

Se0ng_1l·2022년 7월 11일
0

백준

목록 보기
26/40

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

문제 접근

  1. 정렬 알고리즘(빠른정렬)을 이용해서 입력한 수를 정렬한다.
  2. 정렬한 배열의 원소들을 작은순서부터 2개씩 짝을지어 뺄셈을 수행하여 가장 큰 Gap을 찾는다.
    arr[j + 1] - arr[j]
#include <iostream>
using namespace std;

void QuickSort(int l, int h, int *arr) {
    if (h <= l)
        return;
    int p = l;
    int i = p + 1, j = h, temp;
    while( i <= j)
    {
        while (i <= h && arr[i] <= arr[p])
            i++;
        while (j > l && arr[j] >= arr[p])
            j--;

        if (i > j) {
            temp = arr[p];
            arr[p] = arr[j];
            arr[j] = temp;
        } else {
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    QuickSort(l, j - 1, arr);
    QuickSort(j + 1, h, arr);
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int num;
    cin >> num;
    for(int i = 0; i < num; i++)
    {
        int size;
        cin >> size;
        int *arr = new int[size];
        for(int j = 0; j < size; j++)
            cin >> arr[j];
        QuickSort(0, size - 1, arr);
        int maxGap = INT32_MIN;
        for(int j = 0; j < size - 1; j++)
        {
            if(maxGap < arr[j + 1] - arr[j])
                maxGap = arr[j + 1] - arr[j];
        }
        printf("Class %d\n", i + 1);
        printf("Max %d, Min %d, Largest gap %d\n", arr[size - 1], arr[0], maxGap);
        delete [] arr;
    }
}
profile
치타가 되고 싶은 취준생

0개의 댓글