https://www.acmicpc.net/problem/11286
11286번: 절댓값 힙
첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0
www.acmicpc.net
풀이
우선순위 큐의 greater의 자료형을 살펴보면 struct인 것을 알 수 있습니다.
절댓값을 구하는 operator를 struct으로 만들어 쉽게 해결할 수 있습니다.
Code
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct AbsGreater
{
bool operator()(int a, int b) {
if (abs(a) > abs(b))
return true;
else if (abs(a) == abs(b)) {
if (a > b)
return true;
else
return false;
}
else
return false;
}
};
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
cin >> N;
priority_queue<int, vector<int>, AbsGreater> q;
while (N--)
{
int x;
cin >> x;
if (x != 0)
{
q.push(x);
}
else if (x == 0)
{
if (q.empty() == true)
cout << "0" << '\n';
else {
cout << q.top() << '\n';
q.pop();
}
}
}
}
'💻 OnlineJudge > Baekjoon' 카테고리의 다른 글
[백준 / BOJ] C++ 1766 문제집 (0) | 2022.10.06 |
---|---|
[백준 / BOJ] C++ 1655 가운데를 말해요 (0) | 2022.09.26 |
[백준 / BOJ] C++ 1927 최소 힙 (1) | 2022.09.26 |
[백준 / BOJ] C++ 11866 요세푸스 문제 0 (0) | 2022.08.22 |
[백준 / BOJ] C++ 2164 카드 2 (0) | 2022.08.22 |