💡Problem Solving/BOJ

[BOJ 11286] 절댓값 힙 (Java)

gom20 2021. 11. 12. 10:50

문제

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

 

11286번: 절댓값 힙

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

www.acmicpc.net

 

풀이

PriorityQueue를 사용하면 된다. 

Comparator로 정렬 조건을 명시해주었다. 

 

소스코드

package heap;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Comparator;
import java.util.PriorityQueue;

public class BOJ11286 {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        PriorityQueue<Integer> pque = new PriorityQueue<Integer>(new Comparator<Integer>(){
            @Override
            public int compare(Integer a, Integer b){
                int rs = Math.abs(a) - Math.abs(b);
                if(rs == 0) rs = a-b;
                return rs;
            }
        });

        int N = Integer.parseInt(br.readLine());
        for(int i = 0; i < N; i++){
            int x = Integer.parseInt(br.readLine());
            if(x == 0) {
                if(pque.isEmpty()) {
                    bw.write("0\n");
                } else {
                    bw.write(pque.poll() + "\n");
                }
            } else {
                pque.offer(x);
            }
        }
        bw.flush();
    }
}

'💡Problem Solving > BOJ' 카테고리의 다른 글

[BOJ 1956] 운동 (Java)  (0) 2021.11.13
[BOJ 1655] 가운데를 말해요 (Java)  (0) 2021.11.12
[BOJ 1927] 최소 힙 (Java)  (0) 2021.11.12
[BOJ 9375] 패션왕 신해빈 (Java)  (0) 2021.11.11
[BOJ 3036] 링 (Java)  (0) 2021.11.11