백준 9076번: 점수 집계

Se0ng_1l·2022년 7월 11일
0

백준

목록 보기
22/40

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

문제 접근

  1. 동적할당으로 입력값에 해당하는 2차원 배열을 만든다.
  2. Merge Sort를 사용해 각 2차원 배열의 원소들을 정렬한다.
  3. 최소값과 최대값을 제외하고 남은 3개의 값중 최대값고 최소값이 4이상 차이나면 KIN
    아니면 3개의 합을 출력시킨다.
#include <iostream>
using namespace std;
int sorted[100000];
void combine(int l, int h, int mid, int *arr){
    int i = l;
    int j = mid + 1;
    int cnt = l;
    while(i <= mid && j <= h)
    {
        if(arr[i] < arr[j])
            sorted[cnt++] = arr[i++];
        else
            sorted[cnt++] = arr[j++];
    }
    if(i > mid)
        while(j <= h)
            sorted[cnt++] = arr[j++];
    else
        while(i <= mid)
            sorted[cnt++] = arr[i++];
    for(int k = l; k <= h; k++)
        arr[k] = sorted[k];
}

void divide(int l, int h, int *arr)
{
    if(l == h)
        return;
    int mid = (l + h) / 2;
    divide(l, mid, arr);
    divide(mid + 1, h, arr);
    combine(l, h, mid, arr);
}

int main()
{
    int num;
    cin >> num;
    int **score = new int*[num];
    for(int i = 0; i < num; i++)
    {
        score[i] = new int[5];
        for(int j = 0; j < 5; j++)
        {
            cin >> score[i][j];
        }
    }

    for(int i = 0; i < num; i++)
    {
        divide(0, 4, score[i]);
        if(score[i][3] - score[i][1] >= 4)
            cout << "KIN" << endl;
        else
            cout << score[i][1] + score[i][2] + score[i][3] << endl;
    }

    for(int i = 0; i < num; i++)
    {
        delete [] score[i];
    }
    delete [] score;
}
profile
치타가 되고 싶은 취준생

0개의 댓글