[백준] 11286 : 절댓값 힙

김건우·2023년 9월 24일
0

문제 풀이

목록 보기
24/62

절댓값 힙


풀이 방법

이번 문제는 PriorityQueue의 정렬을 간단하게 변경해보는 문제였다.

comapreTo 메서드를 오버라이딩해서 두 값의 절대값이 같을 때는 오름차순으로 정렬해주고, 다를 때는 절대값의 크기 순으로 정렬해주는 간단한 문제였다.

참고 블로그 : https://st-lab.tistory.com/243
(ComparableComparator의 이해)

여기서는 Comparable 인터페이스의 compareTo 메서드를 오버라이딩해서 원하는 결과로 정렬을 구현할 수 있다.

보다 간단하게 작성하기 위해 람다 식으로 작성했다.

문제의 구현 난이도는 어렵지 않았지만, 구조를 이해하는데 보다 많은 시간을 들였었다. 다음의 나올 정렬 문제에서는 보다 빠르게 구현할 수 있을 것 같다!!


소스 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

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

        PriorityQueue<Integer> absHeap = new PriorityQueue<>((o1, o2) -> {
            if(Math.abs(o1) == Math.abs(o2)){
                return o1-o2;
            }
            return Math.abs(o1)-Math.abs(o2);
        });

        for(int i=0;i<n;i++){
            int x = Integer.parseInt(br.readLine());
            if(x!=0){
                absHeap.add(x);
            } else {
                if(absHeap.isEmpty()){
                    sb.append(0).append("\n");
                } else {
                    sb.append(absHeap.remove()).append("\n");
                }
            }
        }

        System.out.println(sb);
    }
}
profile
공부 정리용

0개의 댓글