티스토리 뷰

Problem Solving

2075-N번째 큰 수

developer0hye 2020. 11. 3. 21:48

www.acmicpc.net/problem/2075

 

2075번: N번째 큰 수

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

www.acmicpc.net

Priority Queue 와 Min Heap 에 대한 이해가 필요했던 문제입니다.

 

풀이는 다음과 같습니다.

 

1. 데이터를 입력 받으며, N번째 데이터까지 Priority Queue(Min Heap)에 데이터를 삽입합니다.

데이터가 N개 까지 주어졌을때, Priority Queue의 Top 원소는 가장 작은 수 이면서 N번째로 큰 수로 생각할 수 있습니다.

 

2. N+1번째 데이터부터 Priority Queue의 Top 원소와 비교를 하여 해당 데이터가 더 크다면 Priority Queue의 Top원소를 Pop하고 해당 데이터를 삽입합니다.

 

3. Priority Queue의 Top 원소를 출력합니다.

코드

#include <iostream>
#include <queue>
using namespace std;
int main()
{
    ios_base :: sync_with_stdio(false); 
    cin.tie(NULL); 
    cout.tie(NULL);

	priority_queue< int, vector<int>, greater<int> > minq;

    int n;
    cin >> n;
    for(int i = 0; i < n * n; i++)
    {
        int x;
        cin >> x;
        
        if(minq.size() < n)
        {
            minq.push(x);
        }
        else 
        {
            // N + 1 번째 데이터부터 minq의 가장 작은 root 데이터와 비교하여 그보다 작다면
            // minq의 root 데이터를 제거하고 새로 뽑은 데이터를 삽입함
            if(minq.top() < x)
            {
                minq.pop();
                minq.push(x);
            }
        }
    }

    cout << minq.top();
    
    return 0;
}

 

'Problem Solving' 카테고리의 다른 글

Zig-zag Scanning  (0) 2020.10.15
실용적인 알고리즘 정리  (0) 2020.10.01
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함