본문 바로가기
알고리즘/백준 문제풀이

백준 [자바 java] 1927 : 최소 힙

by 잔디🌿 2023. 7. 13.

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

     

    1927번: 최소 힙

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

    www.acmicpc.net

     

    문제설명

     

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

     

    문제풀이

    • 우선순위큐를 하나 생성한다
    • 수를 입력받고 이게 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<>();
    
            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);
    
    
        }
    }