오늘의 알고리즘

[C++] 백준 11286 절댓값 힙

하늘하늘 . 2022. 9. 20. 19:07
#include <iostream>
#include <vector>
#include <queue>  
 
struct cmp
{
    bool operator()(int iX, int iY)
    {
        if (abs(iX) == abs(iY))
        {
            return iX > iY;
        }
 
        return abs(iX) > abs(iY);
    }
};
 
int main()
{
    int N = 0;
    std::cin >> N;
    std::priority_queue<int, std::vector<int>, cmp> pri_que = {};
 
    for (int i = 0; i < N; ++i)
    {
        int iNumber = 0;
        std::cin >> iNumber;
 
        if (iNumber)
        {
            pri_que.push(iNumber);
        }
 
        else
        {
            if (pri_que.empty())
            {
                std::cout << "0\n";
            }
 
            else
            {
                std::cout << pri_que.top() << "\n";
                pri_que.pop();
            }
        }
    }
 
    return 0;
}

 

무조건 맨 위의 값만을 확인하기 때문에 우선순위큐를 사용했습니다.

절대값만을 확인하면 되기에 cmp라는 operator를 만들어서 절대값이 같다면 적은 게 더 높은 곳으로 오게 만들었습니다.