알고리즘/백준 문제풀이

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

잔디🌿 2023. 7. 13. 01:10

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);


    }
}