알고리즘/백준 문제풀이

백준 [자바 java] 11279 : 최대 힙

잔디🌿 2023. 7. 13. 03:05

https://www.acmicpc.net/problem/11279

 

11279번: 최대 힙

첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0

www.acmicpc.net

 

문제 설명

 

수들을 입력받고, 0을 입력받을 때마다 이제까지 입력받았던 수 중 가장 큰 수를 출력하고 poll한다. 이외의 수를 받으면 힙에 수를 offer한다.

 

풀이 설명

  • 우선순위큐를 하나 생성한다. 이 때 Collections.reverseOrder()을 이용하여 내림차순화 된 우선순위큐로 만들어준다.
  • 수를 입력받고 이게 0이면 우선순위큐에서 poll하고 값을 stringBuilder에 저장(비어있으면 0 저장)
  • 아니라면 이를 우선순위 큐에 저장

 

import java.util.*;
import java.io.*;
import java.math.*;


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> q = new PriorityQueue<>(Collections.reverseOrder());

        StringBuilder sb = new StringBuilder();

        for(int i = 0;i<n;i++){
             int k = Integer.parseInt(br.readLine());
             if(k ==0){
                 if(q.isEmpty() == true){
                     sb.append(0).append("\n");
                 }
                 else{
                     int out = q.poll();
                     sb.append(out).append("\n");
                 }
             }
             else{
                 q.offer(k);
             }
        }

        System.out.println(sb);


    }
}