1. 문제 분석하기
  1. 손으로 풀어 보기

✏️문제 푸는 순서

1️⃣ x = 0 일 때,

큐가 비어 있을 때는 0 출력, 비어있지 않을 때는 절댓값이 최소인 값을 출력(단, 절댓값이 같으면 음수를 우선 출력)

2️⃣ x=0 아니면,

add로 큐에 새로운 값을 추가하고 우선순위 큐 정렬 기준으로 자동 정렬

  1. 슈도코드 작성
우선순위 큐 선언
- 절댓값 기준으로 정렬되도록 설정
- 단, 절댓값 같으면 음수 우선 정렬

for(N번) {
	0: 큐 비어있으면 0, 아니면 큐의 front poll()
	0 아니면: 새로운 데이터 큐에 add()
}
import java.io.*;
import java.util.*;

public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStremReader(System.in));
		int N = Integer.parseInt(br.readLine());
		
		// 커스텀 Queue
		PriorityQueue<Integer> myQueue = new PriorityQueue<>((o1, o2) -> {
			int firstAbs = Math.abs(o1);
			int secondAbs = Math.abs(o2);
			if(firstAbs == secondAbs) {
				return o1 > o2 ? 1 : -1; // 1: o1을 뒤로(오름차순), -1: o1을 앞으로(내림차순)
			} // 절댓값 같은 경우 음수 우선 정렬
			return firstAbs - secondAbs; // 절댓값 작은 데이터 우선 정렬
		});
		
		for(int i = 0; i < N; i++){
			int request = Integer.parseInt(br.readLine());
			if(request == 0) {
				if(myQueue.isEmpty()) {
					System.out.println("0");
				} else {
					System.out.println(myQueue.poll());
				}
			} else {
				myQueue.add(request);
			}
		}	
	}
}

📌 사용된 메서드