PS

BOJ 2075 - N번째 큰 수

728x90

www.acmicpc.net/problem/2075

 

2075번: N번째 큰 수

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

www.acmicpc.net

 

메모리 제한이 있는 문제여서 단순히 이차원배열이나 벡터를 쓰면 메모리 초과가 발생한다.

 

이 문제를 풀기위한 핵심 아이디어는, 입력받은 모든 값을 메모리에 저장하는게 아니라,

최소힙을 이용해서 N 개 만큼만 받은뒤, N 개 이상의 입력이 들어오는 경우,

최소힙에 담긴 가장 작은 값과 비교해서 더 크면 추가해주는 방식으로 쭉 배열을 돌리면

결국 N 개만 최소힙에 남게되고,

가장 큰 것 ~ N번째로 큰 것 만 최소힙에 남게된다.

그러므로 마지막에 최소힙의 top 을 뽑아내면 답이된다.

 

 

 

- c++

#include <bits/stdc++.h>
 
using namespace std;
 
int N;
 
int main() {
    cin.tie(0); ios_base::sync_with_stdio(0);
    
    cin >> N;
    
    priority_queue<intvector<int>, greater<int>> pq;
    
    int temp;
    for (int i = 0; i < N * N; ++i) {
        cin >> temp;
        if (pq.size() < N) pq.push(temp);
        else {
            int num = pq.top();
            if (num < temp) {
                pq.pop();
                pq.push(temp);
            }
        }
    }
    
    cout << pq.top();
    
    return 0;
}
cs

 

 

728x90

'PS' 카테고리의 다른 글

BOJ 2589 - 보물섬  (0) 2021.02.07
BOJ 17298 - 오큰수  (0) 2021.02.07
BOJ 9328 - 열쇠  (0) 2021.02.05
BOJ 1918 - 후위 표기식  (0) 2021.02.04
BOJ 1043 - 거짓말  (0) 2021.02.04