반응형
문제 : https://www.acmicpc.net/problem/2075
서론
메모리 제한이 잡혀있다.
입력값을 전부 배열에 넣거나 큐에 넣으면 메모리초과가 발생할 것이다.
일부만 넣어야 한다.
아이디어
최소힙을 가지는 우선순위 큐를 만든 다음
큐에는 입력값 중 가장 큰 수 n개만 들어가도록 한다. 그럼 큐의 루트 힙이 정답이 될 것이다.
큐의 사이즈가 n개가 될때까지는 그냥 채워주고 n개가 되면 큐의 루트 힙보다 큰 값만 큐에 집어넣고 큐의 루트힙은 빼주면 된다. 그럼 입력값 중 가장 큰 수 n개가 들어있는 큐가 유지된다.
구현
//c++
#pragma warning(disable:4996)
#include <cstdio>
#include <queue>
int main() {
std::priority_queue<int, std::vector<int>, std::greater<int>>q;
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int x;
scanf("%d", &x);
int qSize = q.size();
if (qSize < n) q.push(x);
else if (x > q.top()) {
q.push(x);
q.pop();
}
else continue;
}
}
printf("%d", q.top());
}
최근댓글