package backjoon;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String [] args) throws Exception{
PriorityQueue <Integer> q=new PriorityQueue<>();
q.add(3);
q.add(5);
q.add(2);
//2 3 5 출력
while(!q.isEmpty()) {
System.out.println(q.poll());
}
}
}
자바에서 우선순위 큐는 낮은 값부터 뱉는다.
package backjoon;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String [] args) throws Exception{
PriorityQueue <Integer> q=new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
return o2-o1;
}
});
q.add(3);
q.add(5);
q.add(2);
//5 3 2출력
while(!q.isEmpty()) {
System.out.println(q.poll());
}
}
}
정렬에 여러 조건을 붙일때와 마찬가지로, Comparator
를 이용하면 우선순위를 바꿀 수 있다.
PriorityQueue <int []> q=new PriorityQueue<>(new Comparator<int []>() {
@Override
public int compare(int[] o1, int[] o2) {
// TODO Auto-generated method stub
if (o1[0]==o2[0]) return o1[1]-o2[1];
return o1[0]-o2[0];
}
});
특히 유의해야할 점은!! 우선순위큐에 배열을 넣는 경우, 반드시 Comparator
를 써야 한다는 것이다. PriorityQueue <int []> q=new PriorityQueue<>();
하게 되면 add하는 과정에서 에러가 발생한다.
참고로 1에서 2빼면 오름차순(1,2,3...)이고 2에서 1빼면 내림차순(3,2,1..)이다.