[문제]
11279번: 최대 힙
첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가
www.acmicpc.net
[문제 풀이]
- 우선 순위 큐를 사용
- 입력 받은 수가 0일 때, 큐가 비어 있으면 0을 출력하고 아니라면 가장 위에 있는 수를 출력
[코드]
#include<iostream>
#include<queue>
using namespace std;
int n; // 입력받을 정수의 개수
priority_queue<int> pq;
int main() {
cin.sync_with_stdio(0); // 시간 초과 해결
cin.tie(0);
cin >> n;
for (int i=0;i<n;i++) { // 연산의 개수만큼 반복
int x; // 연산에 대한 정보를 받아줄 변수
cin >> x;
if (x == 0) { //x가 0이라면 (0이 입력된 시점에서의 가장 큰 값을 출력하기 때문)
if (pq.empty()) cout << "0\n";
// queue가 비어있을 경우 0 출력
else {
cout << pq.top() << "\n";
pq.pop();
// 가장 위에 들어가있는 값을 출력
// pop()을 해주면 queue의 선입선출 특징으로 맨위의 값이 나오게 됨
}
} else { // x가 0이 아니라면
pq.push(x); // 입력한 숫자를 priority_queue에 삽입
}
}
return 0;
}
[채점 결과]
'CODE > BOJ' 카테고리의 다른 글
[C++] BOJ 2959 : 거북이 (0) | 2021.09.17 |
---|---|
[C++] BOJ 2752 : 세수정렬 (0) | 2021.09.17 |
[C++] BOJ 1158 : 요세푸스 문제 (0) | 2021.09.16 |
[C++] BOJ 12605 : 단어순서 뒤집기 (0) | 2021.09.15 |
[C++] BOJ 17608 : 막대기 (0) | 2021.09.15 |