알고리즘/백준 문제풀이
백준 [자바 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);
}
}