알고리즘/백준 문제풀이
백준 [자바 java] 11279 : 최대 힙
잔디🌿
2023. 7. 13. 03:05
https://www.acmicpc.net/problem/11279
11279번: 최대 힙
첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0
www.acmicpc.net
문제 설명
수들을 입력받고, 0을 입력받을 때마다 이제까지 입력받았던 수 중 가장 큰 수를 출력하고 poll한다. 이외의 수를 받으면 힙에 수를 offer한다.
풀이 설명
- 우선순위큐를 하나 생성한다. 이 때 Collections.reverseOrder()을 이용하여 내림차순화 된 우선순위큐로 만들어준다.
- 수를 입력받고 이게 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<>(Collections.reverseOrder());
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);
}
}