본문 바로가기
문제 풀이/백준(BOJ)

[C++] 백준 2075번 : N번째 큰 수

by 희조당 2021. 10. 26.
728x90

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

 

2075번: N번째 큰 수

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

www.acmicpc.net


 문제 풀이

우선순위 큐로 풀 수 있는 문제이다.

우선순위 큐를 올림차순으로 구현한다.

N개의 숫자만 가지고 있으면 되기 때문에 큐의 크기가 N보다 커지면 가장 작은 값을 pop 하면 된다.

올림차순이라서 단순하게 pop만 하면 되고 모든 반복이 끝나면 top을 출력하면 된다.

 느낀 점

처음에는 모든 값을 우선순위 큐에 넣었지만 메모리 초과가 발생하였다. N개의 숫자만 가지고 있으면 되는 점을 이해하면 쉽게 풀 수 있는 문제이다.

 코드

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <functional>

using namespace std;

int n;
priority_queue<int, vector<int>, greater<int>> pq;

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	cin >> n;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			int tmp;
			cin >> tmp;
			pq.push(tmp);
			if (pq.size() > n)
				pq.pop();
		}
	}
	cout << pq.top();
}

댓글