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를 이어붙인 느낌으로 구현하였다. 정말 참신하고 재미있는 문제이다.
'알고리즘' 카테고리의 다른 글
| 백준 2252 줄 세우기 (java) (2) | 2023.12.06 |
|---|---|
| 백준 11066 파일합치기 (java) (0) | 2023.12.05 |
| 프로그래머스(단어변환) -java (0) | 2023.12.02 |
| pccp 4번문제(Dfs & backtracking) -java (1) | 2023.12.02 |
| 백준 14503 변형 bfs문제 -java (1) | 2023.12.02 |