‡ CODING TEST STUDY ‡/º 백준

[백준 11286번 C++] 절대값 힙

Trudy | 송연 2023. 9. 17. 02:23

11286번: 절댓값 힙 (acmicpc.net)

 

11286번: 절댓값 힙

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

www.acmicpc.net


[C언어/C++] 절대값 구하기 (abs, labs, fabs) 함수 사용법 & 예제 (tistory.com)

 

[C언어/C++] 절대값 구하기 (abs, labs, fabs) 함수 사용법 & 예제

코딩을 하다보면 가끔 숫자의 절대값이 필요한 경우가 있습니다. 이런 경우 따로 알고리즘 구현없이 abs, labs, fabs라는 절대값 반환 함수를 활용하여 절대값 숫자를 반환받을 수 있습니다. 절대값

coding-factory.tistory.com

일단 절대값 메서드는 기본 <iostream> 헤더파일에 

abs 함수에 정의 되어 있다

 

절대값만 추가해서는 풀리는 문제가 아니었고, 절대값으로 비교를 하되, 원본은 가지고 있어야하기 때문에 pair<int, int>를 이용해줘야했다

priority_queue에서 pair로 선언하기 위해서는 int 부분을 모두 pair<int, int>로 바꿔주면 되는데, 다음과 같다

priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>> pq;

최종 코드는

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

int main()
{
    cin.tie(NULL);
    cin.sync_with_stdio(false);
    
    int n, m;
    cin >> n;
    
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
    for(int i=0; i<n; i++){
        cin >> m;
        
        if(m == 0){
            if(pq.empty()) cout << 0 <<"\n";
            else {
                cout <<pq.top().second <<"\n";
                pq.pop();
            }
        }
        else {
            pq.push({abs(m), m});
        }
    }
    return 0;
}