
자바에서는 현재 Priority Queue를 이용해서 최대힙, 최소힙을 간단하게 사용할 수 있도록 제공해주고 있습니다.
문제를 이해해봅시다. 첫째줄에 연산의 갯수 N을 입력받습니다.
그 다음엔, N번 정수X를 입력받는데, X가 자연수면 배열에 X를 추가하고, X가 0이면, 배열에서 가장 큰 값을 출력하고, 그 값을 배열에서 제거해야합니다.
정수를 입력받기 위해, BufferedReader를 사용했습니다.
BufferedReader는 문자열로 받아오기 때문에, Integer.parseInt()를 사용해서, 정수형으로 바꾸어줍니다.
우선순위큐를 선언해주고, 기본은 우선순위가 낮은 숫자가 부여되기 때문에, 메서드를 활용하여 높은 숫자가 우선순위가 되도록 오름차순으로 정렬합니다.
그 후, 값을 출력하기 위한 StringBuilder 를 선언해주었습니다.
for문을 통해 N번 반복해가며, x를 입력받고, 조건문을 나눠 각 x값에 따른 조건별로 값을 sb에 추가해주거나, x를 pq에 넣어주었습니다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Collections;
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
PriorityQueue<Integer> pq = new PriorityQueue<Integer>(Collections.reverseOrder());
StringBuilder sb = new StringBuilder();
for(int i=0; i<n; i++){
int x = Integer.parseInt(br.readLine());
if( x == 0 ){
if(pq.isEmpty()) sb.append("0").append("\n"); // pq가 비어있다면, sb에 0추가
else{ sb.append(pq.poll()).append("\n"); // pq에서 최댓값을 추출해 sb에 추가
}
}else{
pq.offer(x); // 입력값이 자연수라면, 배열에 x를 추가
}
}
System.out.println(sb); // x가 0인 경우에만 추가하였으므로, 0이 주어진 횟수만큼 답을 출력하게 됨
}
}