문제 해석
최소 힙 문제는 전 POST였던 11279_최대 힙 문제랑 99% 유사하다.
입력받을 연산의 개수(=N)개를 입력받고 N개만큼 자연수나 0을 입력받아 연산을 처리한다.
작은 값을 출력하는 문제이기 때문에 전 포스트였던 최대 힙 문제와 반대로 default값인 아래의 코드로 바꿔주면 된다.
// default : 우선순위가 낮은 숫자가 먼저 나온다. (낮은 숫자 순)
PriorityQueue<Integer> pQ = new PriorityQueue<>();
코드
import java.io.*;
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine()); //연산 개수
//defualt : 우선순위가 최소인 값을 먼저 추출한다.
PriorityQueue<Integer> Queue = new PriorityQueue <>();
while(N --> 0){
int x = Integer.parseInt(br.readLine()); //연산
if(x == 0){ //0이면 가장 작은 값을 출력하고 배열에서 제거
if(Queue.isEmpty()){ //배열이 비어있으면 0을 출력
sb.append(0).append("\n");
}else{ //배열이 안비어있으면
sb.append(Queue.poll()).append("\n");
}
}else{ //0이 아니고, 자연수라면 배열에 x를 추가
Queue.add(x);
}
}
br.close();
System.out.println(sb);
}
}
결과
느낀 점