분류 : 자료구조
https://www.acmicpc.net/problem/11286
절댓값 힙은 다음과 같은 연산을 지원하는 자료구조이다.
프로그램은 처음에 비어있는 배열에서 시작하게 된다.
첫째 줄 : 연산의 개수 N
다음 N개의 줄 : 연산에 대한 정보를 나타내는 정수 X
X가 0이 아님 -> 배열에 X라는 값 추가
X가 0 -> 배열에 절대값이 가장 작은 값 출력, 배열에서 값 제거
최소힙과 동일한 방식인데 절대값만 계산해주면 된다.
자바에서는 PriorityQueue를 이용해 구현할 수 있다.
import java.util.PriorityQueue;
import java.util.Scanner;
//20211228
public class minAbsoluteHeap {
public static void solution(){
Scanner in = new Scanner(System.in);
//연산 개수
int N = in.nextInt();
//Comparator의 compare 메소드 오버라이드
//절대값으로 최소힙 정렬
PriorityQueue<Integer> queue = new PriorityQueue<>((o1, o2) -> {
int abs1 = Math.abs(o1);
int abs2 = Math.abs(o2);
//절대값이 같은 경우
if(abs1==abs2){
//os가 양수면(더 크면) 1 return
return o1 > o2 ? 1 : -1;
}
//o1이 더 크면 양수 리턴, 작으면 음수 리턴
return abs1-abs2;
});
for(int i=0; i<N;i++){
int num = in.nextInt();
//0이 아닐 떄 배열(최소힙)에 값 추가
if(num!=0){
queue.offer(num);
}
//절대값 가장 작은 값 출력, 배열에서 제거
else{
if(queue.isEmpty()){
System.out.println('0');
}
else{
System.out.println(queue.poll());
}
}
}
}
}