본문 바로가기
알고리즘 문제풀이

[백준 11286] 알고리즘 97일차 : 절댓값 힙

by SiO2whocode 2021. 7. 1.
728x90

https://www.acmicpc.net/problem/11286

 

11286번: 절댓값 힙

첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0

www.acmicpc.net

우선순위 큐

이번엔 비교로직을 구현해야하는 문제

operator 오버로딩해서 절댓값으로 비교하게 하면 된다.

 

소스코드

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

struct cmp{
    bool operator()(int a, int b){
        if( abs(a) == abs(b) )
            return a > b;
        else
            return abs(a) > abs(b);
    }
};


int main(){
    
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    
    priority_queue<int, vector<int>, cmp> heap;

    int t;
    cin >> t;
    
    int x;
    for(int i = 0 ; i < t ; i++){
        cin >> x;
        if(x == 0){
            if(heap.empty()){
                cout << "0\n";
            }else{
                cout << heap.top() << "\n";
                heap.pop();
            }
        }else{
            heap.push(x);
        }
    }
    
    return 0;
}

방금 안 놀라운 사실.. 언제부터 C++이 return 0; 없이 돌아갔죠..?

728x90