알고리즘
백준 1665번 가운데를 말해요 (java)
창따오
2023. 12. 4. 17:33
728x90

출처 : https://www.acmicpc.net/problem/1655
소소코드
package baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
public class Baek1655 {
static PriorityQueue<Integer> minHeap = new PriorityQueue<>();
static PriorityQueue<Integer> maxHeap = new PriorityQueue<>((a,b)->b-a); //큰값을 root값으로
static int n;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; i++) {
int num = Integer.parseInt(br.readLine());
if (minHeap.size() == maxHeap.size()) {
maxHeap.add(num);
if (minHeap.size() != 0 && minHeap.peek() < maxHeap.peek()) {
maxHeap.add(minHeap.poll());
minHeap.add(maxHeap.poll());
}
}else{
minHeap.add(num);
if (maxHeap.peek() > minHeap.peek()) {
minHeap.add(maxHeap.poll());
maxHeap.add(minHeap.poll());
}
}
sb.append(maxHeap.peek()).append("\n");
}
System.out.println(sb.toString());
}
}
느낀점
-> PriorityQueue를 이렇게 창의적으로 이어붙어서 사용할 수 있구나? 처음에는 PriorityQueue가 get()메소드를 가지고있다 생각하고 하나의 PriorityQueue를 사용하여 중간 index값을 반환하는 식으로 풀이를 진행하였다... 하지만 get() 메소드가 없다는 것을 인지했고, 생각하다가 PriorityQueue를 이어붙인 느낌으로 구현하였다. 정말 참신하고 재미있는 문제이다.