문제링크: https://www.acmicpc.net/problem/11286
우선순위 큐를 사용하여서 해결하는 문제
접근방식
1. 절댓값에 대한 순서를 우선순위 큐를 활용하여 해결하자!
문제풀이
1. pair형태의 우선순위 큐 생성
2. min-heap형태로 구성!
근데, "절댓값이 가장 작은 값이 여러개일 때는, 가장 작은 수를 출력" 하라는 조건이 있으니 두번째 원소값을 변형 하여서 구현하기
정답코드
#include <iostream>
#include <queue>
#include <cmath>
using namespace std;
priority_queue <pair<int, int>> que;
int n = 0;
int num = 0;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n;
while (n--) {
cin >> num;
if (num == 0) {
if (que.size() == 0)
cout << 0 << "\n";
else {
cout << que.top().first * que.top().second << "\n";
que.pop();
}
}
else {
if(num > 0)
que.push(make_pair(-1 * abs(num),-1));
else
que.push(make_pair(-1 * abs(num), 1));
}
}
return 0;
}
'알고리즘 > DP' 카테고리의 다른 글
[백준] 15924-욱제는 사과팬이야!!(C++) (0) | 2021.08.21 |
---|---|
[백준] 13703-물벼룩의 생존확률(C++) (0) | 2021.08.21 |
[백준] 2578-로또(C++) (0) | 2021.08.17 |
[백준] 2186-문자판(C++) (0) | 2021.08.15 |
[백준] 10942-팰린드롬?(C++) (0) | 2021.07.25 |