알고리즘 공부
99클럽 코테 스터디 9일차 TIL
HD9504
2024. 7. 30. 22:37
오늘의 학습 키워드
- 우선순위 큐 (Priority Queue)
문제
[백준 1927번 최소 힙 문제](https://www.acmicpc.net/problem/1927)
문제 이해
주어진 숫자들을 입력받아 최소 힙을 구현하고, 0이 입력으로 주어질 때마다 힙에서 가장 작은 값을 출력하는 문제입니다. 만약 힙이 비어 있을 경우 0을 출력합니다.
나의 풀이
package org.example.B\_1927;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
public class Main {
static int N;
public static void main(String\[\] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
for (int i = 0; i < N; i++) {
int num = Integer.parseInt(br.readLine());
if (num == 0) {
if (minHeap.isEmpty()) {
sb.append(0).append("\\n");
} else {
sb.append(minHeap.poll()).append("\\n");
}
} else {
minHeap.add(num);
}
}
System.out.println(sb);
}
}
풀이 설명
- 반복문을 통해 `N`개의 숫자를 입력받습니다.
- 입력된 숫자가 `0`일 경우:
- 힙이 비어 있으면 `0`을 출력 결과에 추가합니다.
- 힙이 비어 있지 않으면 `poll()` 메소드를 사용하여 힙에서 가장 작은 값을 출력 결과에 추가합니다.
- 입력된 숫자가 `0`이 아닐 경우:
- 힙에 해당 숫자를 추가합니다.
오늘의 회고
- 우선순위 큐를 사용하여 최소 힙을 구현하는 문제를 해결함. 리스트를 사용해서 최소값을 구했으면 시간초과가 발생했을 것으로 예상됨.