본문 바로가기
알고리즘/백준

[백준] 11286 절대값 힙

by 오오오니 2022. 4. 13.

문제의 조건은 

1.절대값이 작은 순서대로

2.절대값이 같으면 원래수가 작은 순서대로

힙의 값을 출력

힙은 기본으로 오름차순 정렬을 해주기 때문에 num이 양수로 들어오면 음수로 만들어서 정렬해줬다.

절대 값이 같은경우 음수가 먼저 출력되어야하기 때문에 pair의 second에 num이 양수이면 -1 음수이면 1을 넣어주었다.

 

#include <iostream>
#include <queue>
#include <cmath>
using namespace std;

priority_queue <pair<int, int>> q;
int n = 0;
int num = 0;

//가장 큰 값이 top을 유지
int main() {
	

	cin >> n;
	while (n--) {
		cin >> num;
		if (num==0)
		{
			if(!q.size())
				cout <<0 <<"\n";
			else {
				cout <<  q.top().first * q.top().second << "\n";
				q.pop();
			}
		}
		else {
			if (num > 0)// 1과 -2가 들어온다고 했을때  1이 더 큰 우선순위를 가져야하므로 -1과  -2로 만들어준다
				q.push(make_pair(-1*num, -1));
			else
			{
				q.push(make_pair(  num, 1));//절대값이 같을 때 더 작은 것이 우선순위
				
			}
		}

	}

	return 0;
}

'알고리즘 > 백준' 카테고리의 다른 글

[백준 ] 2042 구간합 구하기 C++  (0) 2022.05.22
[백준] 1992 쿼드트리 c++  (0) 2022.05.14
[백준] 15829 Hashing c++  (0) 2022.04.13
[백준] 10815숫자카드 c++  (0) 2022.04.03
[백준]1094막대기 C++  (0) 2022.03.30