백준 1927 최소 힙 [JAVA]

Ga0·2025년 1월 31일
0

baekjoon

목록 보기
144/146

문제 해석

  • 최소 힙 문제는 전 POST였던 11279_최대 힙 문제랑 99% 유사하다.

  • 입력받을 연산의 개수(=N)개를 입력받고 N개만큼 자연수나 0을 입력받아 연산을 처리한다.

    • 0을 입력받은 경우 배열에서 가장 작은 값을 출력 후 그 값을 배열에서 제거하고 만약 배열이 비어있다면 0을 출력한다.
    • 자연수를 입력받은 경우는 배열에 해당 자연수(x)를 추가한다.
  • 작은 값을 출력하는 문제이기 때문에 전 포스트였던 최대 힙 문제와 반대로 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);
    }
}

결과

느낀 점

  • 최대 힙 문제를 풀고난 직 후여서 크게 어려움없이 바로 풀 수 있었던 거라 느낀점이라고 할게 없다...

0개의 댓글

관련 채용 정보