반응형
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..)이다.
PriorityQueue <int []> q=new PriorityQueue<>((o1,o2)-> {return o1[0]-o2[0]; });
람다식을 쓰면 한 줄로 줄일 수 있다.
그래도 파이썬에 비하면 불편하기 짝이 없다...
이 포스트는 2021.12~2022.09 기간동안 벨로그에 작성한 글을 티스토리에 옮겨 적은 것입니다.
반응형
'개발 관련 공부 > 코테용 자바' 카테고리의 다른 글
자바에서 순열과 조합 (0) | 2022.09.19 |
---|---|
자바에서 큐의 사용 (0) | 2022.09.19 |
댓글