dh-winternagi 님의 블로그
(2075) N번째 큰 수 본문
https://www.acmicpc.net/problem/2075
단계별로 풀어보기
26단계(우선순위 큐) 4번째
N이 최대 1500이므로 N*N개의 원소를 전부 정렬하면 시간 초과가 난다.
맨 아래 행의 수들을 전부 우선순위 큐에 집어넣으면, 1번째로 큰 수는 이 중에 있다.
i번째로 큰 수를 빼고 그 윗칸의 수를 넣으면, i+1번째 큰 수는 항상 우선순위 큐 안에 있다.
따라서 N번 반복하면 된다. 우선순위 큐의 삽입과 삭제는 O(log N)이 소요되므로 전체 시간 복잡도는 O(N log N)이다.

#include <iostream>
#include <queue>
using namespace std;
typedef pair<int,int> p;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin >> n;
vector v(n, vector<int> (n));
for(int i=n-1;i>=0;i--){
for(int j=0;j<n;j++){
cin >> v[i][j];
}
}
auto cmp= [](int A, int B){
if(abs(A)!=abs(B)) return abs(A)>abs(B);
return A>B;
};
priority_queue<p> pq;
for(int i=0;i<n;i++) pq.push({v[0][i], i});
for(int i=1;i<n;i++){
int now= pq.top().second;
pq.pop();
pq.push({v[now/n+1][now%n], now+n});
}
cout << pq.top().first;
return 0;
}'백준 (C++) > Solve' 카테고리의 다른 글
| (1202) 보석 도둑 (0) | 2026.04.18 |
|---|---|
| (2696) 중앙값 구하기 (0) | 2026.04.18 |
| (11286) 절댓값 힙 (0) | 2026.04.18 |
| (1927) 최소 힙 (0) | 2026.04.18 |
| (11279) 최대 힙 (0) | 2026.04.18 |
