끄적끄적 코딩
article thumbnail

우선순위 큐에서 값을 뽑아낼 때 절대값이 낮은 순대로 뽑는 문제입니다.

절댓값을 기준으로하여 내림차순으로 뽑아야하므로 다음처럼 선언해줍니다.
priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > pq;
pair의 첫번째는 절댓값이고, 두번째는 원래 값입니다.
그 뒤의 것들은 내림차순을 의미합니다.

 

#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;

int main(int argc, char *argv[])
{
	int n;
	int num;
	priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > pq;
	
	scanf("%d", &n);

	while (n--) {
		scanf("%d", &num);
		if (num == 0) {
			if (pq.empty()) {
				printf("0\n");
			}
			else {
				printf("%d\n", pq.top().second);
				pq.pop();
			}
		}
		else {
			pq.push(make_pair(abs(num), num));
		}
	}

	return 0;
}

'알고리즘' 카테고리의 다른 글

[C++] 백준 3425번 고스택  (0) 2019.09.10
[C++] 백준 1655번 가운데를 말해요  (0) 2019.09.10
[C++] 백준 1927번 최소 힙  (0) 2019.09.09
[C++] 백준 11279번 최대 힙  (0) 2019.09.09
[C++] 백준 10816번 숫자 카드 2  (0) 2019.09.09

검색 태그