https://www.acmicpc.net/problem/9076
- 동적할당으로 입력값에 해당하는 2차원 배열을 만든다.
- Merge Sort를 사용해 각 2차원 배열의 원소들을 정렬한다.
- 최소값과 최대값을 제외하고 남은 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;
}