import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bufferedReader.readLine());
// 큰 숫자를 먼저 출력해야 하므로 reverseOrder()로 내림차순 정렬
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Collections.reverseOrder());
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < N; i ++) {
int x = Integer.parseInt(bufferedReader.readLine());
// x가 0일 때, 배열이 비어있으면 0 출력
// x가 자연수일 때, 배열 맨 앞에 추가, 출력, 제거
if(x == 0) {
if (priorityQueue.isEmpty())
stringBuilder.append(0).append("\n");
else
stringBuilder.append(priorityQueue.poll()).append("\n");
}
else{
priorityQueue.offer(x);
}
}
System.out.println(stringBuilder);
}
}
힙은 우선순위 큐 PriorityQueue를 이용해서 구현할 수 있습니다.
PriorityQueue는 기본적으로 오름차순 정렬을 하며, Collections.reverseOrder()를 통해 내림차순 정렬을 할 수 있습니다.
x가 0일 때, 배열이 비어있다면 0을 출력합니다. 비어있지 않다면, priorityQueue.poll()을 통해 가장 큰 값을 출력하고 그 값을 배열에서 제거합니다. 내림차순 정렬을 했기 때문에 priorityQueue.poll()을 하면 가장 맨 앞에 위치한 값이 가장 큰 값이며, 한 번에 출력하고 제거할 수 있습니다.
x가 자연수일 때, priorityQueue.offer(x)를 통해 배열에 x를 추가합니다.
.
.
.
문제는 아래에서 확인할 수 있습니다.
https://www.acmicpc.net/problem/11279
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준_JAVA_알고리즘] 11000 강의실 배정 #힙 #우선순위 큐 (0) | 2024.12.23 |
---|---|
[백준_JAVA_알고리즘] 1715 카드 정렬하기 #힙 #우선순위 큐 (0) | 2024.12.23 |
[백준_JAVA_알고리즘] 11286 절댓값 힙 #힙 #우선순위 큐 (1) | 2024.12.15 |
[백준_JAVA_알고리즘] 24511 queuestack (4) | 2024.07.20 |
[백준_JAVA_알고리즘] 11729 하노이 탑 이동 순서 (0) | 2024.06.29 |