1. 문제 설명
- 문제 링크
- 배열에 정수 x (x ≠ 0)를 넣는다.
- 배열에서 절댓값이 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다. 절댓값이 가장 작은 값이 여러개일 때는, 가장 작은 수를 출력하고, 그 값을 배열에서 제거한다
- 비거나 0이면 출력
2. 풀이
- priority_queue 라이브러리 활용
3. 코드
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<queue>
using namespace std;
int N;
// 쌍으로 입력받음 (절대값, 실제값) -> 정렬기준은 앞에 있는 원소
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, 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().second);
pq.pop(); // 출력 후 제거
}
}
else {
// 0이아니면 입력
pq.push(make_pair(abs(number), number));
}
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//1. 입력
Input();
//2. 풀이
Solve();
return 0;
}
# 알고리즘은 C++과 동일
4. 결과
간단한 문제라 생략!