백준 24060 c++

magicdrill·2024년 4월 13일
0

백준 문제풀이

목록 보기
301/654

백준 24060 c++

#include <iostream>

using namespace std;

int N, cnt = 0, K = 0, result = -1;
int* A;
int* tmp;

int input(int lower, int upper)
{
	//cout << "input()\n";
	int A;

	while (1)
	{
		cin >> A;
		if (A >= lower && A <= upper)
		{
			break;
		}
		else
		{
			;
		}
	}

	return A;
}

void input_arr(int *A, int num)
{
	//cout << "input_arr()\n";
	int i;

	for (i = 0; i < num; i++)
	{
		A[i] = input(1, 1000000000);
	}

	return;
}

void merge(int *A, int p, int q, int r)
{
    int i = p, j = q + 1, t = 1;

    while (i <= q && j <= r)
    {
        if (A[i] <= A[j])
            tmp[t++] = A[i++];
        else
            tmp[t++] = A[j++];
    }
    while (i <= q)
        tmp[t++] = A[i++];

    while (j <= r)
        tmp[t++] = A[j++];

    i = p, t = 1;
    while (i <= r)
    {
        A[i++] = tmp[t++];
        cnt++;
        if (cnt == K)
        {
            result = A[i - 1];
            break;
        }
    }
}

void merge_sort(int *A, int p, int r)
{
	int q;

    if (p < r)
    {
        q = (p + r) / 2;
        merge_sort(A, p, q);
        merge_sort(A, q + 1, r);
        merge(A, p, q, r);
    }
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	N = input(5, 500000);
	K = input(1, 100000000);
	A = new int[N + 1];
	tmp = new int[N + 1];
	input_arr(A, N);
	merge_sort(A, 0, N-1);
	cout << result;
	delete[] A;
	delete[] tmp;

	return 0;
}

0개의 댓글