1. 문제 설명
- 문제 링크
- 배열에 자연수 x를 넣는다.
- 배열에서 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다.
- 비거나 0이면 출력
2. 풀이
- priority_queue 라이브러리 활용
3. 코드
- C++
#include<iostream>
#include<queue>
using namespace std;
int N;
priority_queue<int, vector<int>, greater<int>> pq;
void Input() {
scanf("%d", &N);
}
void Solve() {
int number; // 입력받을 숫자
for (int i = 0; i < N; i++) {
scanf("%d", &number);
if (number == 0) { // 입력받은 숫자가 0이면
if (pq.empty()) printf("0\n"); // 비었으면 0출력
else {
// 안비었으면 pq의 맨처음 원소 출력
printf("%d\n", pq.top());
pq.pop(); // 출력 후 제거
}
}
else {
// 0이아니면 입력
pq.push(number);
}
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//1. 입력
Input();
//2. 풀이
Solve();
return 0;
}
- python
# 알고리즘은 C++과 동일
import heapq
from sys import stdin
N = int(stdin.readline())
pq = []
for i in range(N):
num = int(stdin.readline())
if num == 0:
if heap:
print(heapq.heappop(pq)[1])
else:
print(0)
else:
heapq.heappush(pq, [num, num])
4. 결과
간단한 문제라 생략!