생각보다 간단한 문제였다.

N번째 큰 수를 찾아야하므로 크기가 N 초과가 되면 안되는 우선순위 큐를 선언한 다음에 하나씩 입력받다가 N 초과가 되는 경우 제일 작은 값을 뺴주어 N개를 유지시키는 식으로 쭉 입력받고 맨 마지막에 우선순위 큐에 있는 N개의 수 중에서 제일 작은 값이 N번째 큰 수가 된다.

#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>
#include <queue>

using namespace std;
priority_queue<int, vector<int>, greater<int>> pq;
int main()
{
    int n, input;
    scanf("%d", &n);
    for (int i = 0; i < n * n; i++) {
        scanf("%d", &input);
        pq.push(input);
        if (pq.size() > n) {
            pq.pop();
        }
    }

    printf("%d", pq.top());
    
    return 0;
}

 

 

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

 

2075번: N번째 큰 수

첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다.

www.acmicpc.net

 

'책장 > 알고리즘' 카테고리의 다른 글

[백준-16724] 피리 부는 사나이  (0) 2021.08.20
[백준-12852] 1로 만들기 2  (0) 2021.08.20
[백준-9935] 문자열폭발  (0) 2021.08.19
[백준-2166] 다각형의 면적  (0) 2021.08.19