문제 : https://www.acmicpc.net/problem/2075
[알고리즘풀이]
메모리 제한이 10MB로 N * N 개의 수를 전부 저장한다음 Sorting하고 N번 째 큰 수를 출력한다면 '메모리 초과'를 받게 된다.
N * N 개의 수 중에서 N번 째로 큰 수를 출력하는 문제를 바꿔생각하면 들어온 입력 중 크기가 큰 순서대로 N개의 수만 기억하고 있으면 답을 출력할 수 있다.
즉, N개의 수를 N번 입력받으면서 지금까지 입력된 수 중에서 큰 순서대로 N개만 저장하는 알고리즘을 구현해야한다.
1차원 배열을 선언해서 문제를 해결할 수도 있지만, 자료구조 우선순위큐(Priority_Queue)를 이용하면 간단하게 알고리즘을 구현할 수 있다.
[예시]
-Input
5
12 7 9 15 5
13 8 11 19 6
21 10 26 31 16
48 14 28 35 25
52 20 32 41 49
-Priority_Queue
PQ[0] | PQ[1] | PQ[2] | PQ[3] | PQ[4] | |
"12 7 9 15 5" 입력 | 5 | 7 | 9 | 12 | 15 |
"13 8 11 19 6" 입력 | 11 | 12 | 13 | 15 | 19 |
"21 10 26 31 16" 입력 | 16 | 19 | 21 | 26 | 31 |
"48 14 28 35 25" 입력 | 25 | 28 | 31 | 35 | 48 |
"52 20 32 41 49" 입력 | 35 | 41 | 48 | 49 | 52 |
-Output
35
[소스코드]
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0);
int x,n;
priority_queue<int, vector<int>, greater<int>> pq;
cin >> n;
for(int j = 0; j < n; j++){
cin >> x;
pq.push(x);
}
for (int i = 1; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> x;
if (x > pq.top()) {
pq.pop();
pq.push(x);
}
}
}
cout << pq.top();
}
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] 1325 - 효율적인 해킹 : travelbeeee (0) | 2019.11.18 |
---|---|
[BOJ] 5427 : fire - travelbeeee (0) | 2019.11.18 |
[BOJ] 2023 : 신기한 소수 - travelbeeee (0) | 2019.11.06 |
[BOJ] 6679 : 싱기한 네자리 숫자 - travelbeeee (0) | 2019.11.06 |
[BOJ] 9372 : Flying Safely - travelbeeee (0) | 2019.11.06 |