백준 24060 (병합 정렬 1) - C
#include <stdio.h>
#include <stdlib.h>
int cnt = 0;
void merge(int arr[], int p, int q, int r, int K) {
int i = p;
int j = q + 1;
int t = 1;
int tmp[r + 2];
while (i <= q && j <= r) {
if (arr[i] <= arr[j]) {
tmp[t++] = arr[i++];
} else
tmp[t++] = arr[j++];
}
while (i <= q)
tmp[t++] = arr[i++];
while (j <= r)
tmp[t++] = arr[j++];
i = p;
t = 1;
while (i <= r) {
arr[i++] = tmp[t++];
if (++cnt == K)
printf("%d\n", tmp[t - 1]);
}
}
void merge_sort(int arr[], int p, int r, int K) {
if (p < r) {
int q = (p + r) / 2;
merge_sort(arr, p, q, K);
merge_sort(arr, q + 1, r, K);
merge(arr, p, q, r, K);
}
}
int main() {
int size = 0, K = 0;
scanf("%d %d", &size, &K);
int arr[size];
for (int i = 0; i < size; i++)
scanf("%d", &arr[i]);
merge_sort(arr, 0, size - 1, K);
if (cnt < K)
printf("-1\n");
return 0;
}
백준 10817 (세 수) - C
#include <stdio.h>
#include <stdlib.h>
int cnt = 0;
void merge(int arr[], int p, int q, int r) {
int i = p;
int j = q + 1;
int t = 1;
int tmp[r + 2];
while (i <= q && j <= r) {
if (arr[i] <= arr[j]) {
tmp[t++] = arr[i++];
} else
tmp[t++] = arr[j++];
}
while (i <= q)
tmp[t++] = arr[i++];
while (j <= r)
tmp[t++] = arr[j++];
i = p;
t = 1;
while (i <= r) {
arr[i++] = tmp[t++];
}
}
void merge_sort(int arr[], int p, int r) {
if (p < r) {
int q = (p + r) / 2;
merge_sort(arr, p, q);
merge_sort(arr, q + 1, r);
merge(arr, p, q, r);
}
}
int main() {
int arr[3];
scanf("%d %d %d", &arr[0], &arr[1], &arr[2]);
merge_sort(arr, 0, 2);
printf("%d\n", arr[1]);
return 0;
}