
-Code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
public class BOJ11286 {
public static void main(String[] args) throws IOException {
// 인풋이 많아서 BufferedReader 사용
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
// 우선순위 큐 선언
PriorityQueue<Integer> queue = new PriorityQueue<>(
// 정렬 기준 설정
(o1, o2) -> {
// 절대값 작은 순 정렬
int first_abs = Math.abs(o1);
int second_abs = Math.abs(o2);
// 절대값이 같은 경우 음수 우선 정렬
if (first_abs == second_abs) {
return o1 > o2 ? 1 : -1;
}
return first_abs - second_abs;
}
);
for (int i = 0; i < n; i++) {
int input_num = Integer.parseInt(br.readLine());
// 인풋이 0인 경우
if (input_num == 0) {
// queue가 비어있으면 0 출력
if (queue.isEmpty()) {
System.out.println(0);
} else {
// 0이 아니면 가장 작은 값 출력
System.out.println(queue.poll());
}
} else {
queue.add(input_num);
}
}
}
}
예전에 파이썬으로 풀었건 것은 리스트로 절대값과 원래 값을 넣고 힙에 넣으면 해결이 되었지만 자바로 해보니 직접 정렬로직을 구해야해서 해당 부분을 찾아서 하는데 오래 걸렸습니다. 이전에도 Comparator에서 많이 막혔는데 계속 접해봐야 할 것 같습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 2750번 소트인사이드 (0) | 2025.09.26 |
|---|---|
| [백준/Java] 2750번 수 정렬하기 (0) | 2025.09.26 |
| [백준/Java] 2164번 카드2 (0) | 2025.09.25 |
| [백준/Java] 1874번 스택 수열 (0) | 2025.09.25 |
| [백준/Java] 12891번 DNA 비밀번호 (0) | 2025.09.19 |