본문 바로가기
Baekjoon

[백준] 11286번 - 절댓값 힙 - Java

by jinjin98 2022. 12. 11.

 

PriorityQueue 를 이용해서 풀었습니다.

입력한 값과 입력한 값의 절댓값을 갖고있는 Heap 이라는 클래스를 생성해 Heap 클래스 객체를 요소로 하는

PriorityQueue 를 생성합니다. PriorityQueue 의 정렬기준은 절댓값 오름차순으로 하고, 절댓값이 같다면 

입력한 값을 오름차순으로 정렬하도록 했습니다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;

public class p11286 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuffer sb = new StringBuffer();
        int N = Integer.parseInt(br.readLine());

        Queue<Heap> q = new PriorityQueue<>(new Comparator<Heap>() {
            @Override
            public int compare(Heap o1, Heap o2) {
                if(o1.abs == o2.abs)
                    return o1.num - o2.num;

                return o1.abs - o2.abs;
            }
        });

        for(int i=0; i<N; i++) {

            int num = Integer.parseInt(br.readLine());

            if(num ==0) {
                if(q.isEmpty())
                    sb.append(0 + "\n");
                else
                    sb.append(q.poll().num +"\n");
            } else {
                q.add(new Heap(num, Math.abs(num)));
            }
        }
        System.out.println(sb);
    }

    static class Heap {
        int num;
        int abs;

        public Heap(int num, int abs) {
            this.num = num;
            this.abs = abs;
        }
    }
}

댓글