๋ฐ์ํ
Priority Queue
FIFO(First In First Out)์ธ ์ผ๋ฐ์ ์ธ Queue์ ๋ค๋ฅด๊ฒ Priority Queue๋ ์ฐ์ ์์๊ฐ ๋์ ๋ฐ์ดํฐ๊ฐ ๋จผ์ Out๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ํ๊ฒ ๋๋๋ฐ ์ ๋ ฌ ๊ธฐ์ค์ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด ๋๋ค์์ ์ด์ฉํ๊ฑฐ๋ Comparator, Comparable๋ฅผ ์ด์ฉํด์ผ ํ๋ค.
- Integer๋ Collections.reverseOrder()๋ฅผ ํตํด ๊ฐ๋จํ๊ฒ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ ํ ์ ์๋ค.
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
pq.add(5);
pq.add(7);
pq.add(10);
pq.add(3);
System.out.println(pq.poll()); // 10 ์ถ๋ ฅ
add๊ฐ ์๋ offer๋ฅผ ์ฌ์ฉํด๋ ๋จ..!
์์ฉ์ ํด๋ณด์!
์ขํ๊ฐ ์ ์ฅ๋์ด ์๋ ์ด์ฐจ์ ๋ฐฐ์ด์ด ์๊ณ , ์์ ์์ ๋ถํฐ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ๊น์ด ์์๋๋ก ์ถ๋ ฅํ๊ณ ์ ํ๋ค๋ฉด ์๋์ ๊ฐ์ด ์์ฑํ๋ฉด ๋๋ค.
- ์ค๋ฆ์ฐจ์
int[][] points = {{1,3}, {-2,2}, {-4,1}};
//1. ๋๋ค์ ์ด์ฉ
Queue<int[]> pq = new PriorityQueue<>((a,b)->(a[0]*a[0]+a[1]*a[1])-(b[0]*b[0]+b[1]*b[1]));
//2. Comparator ์ด์ฉ
Queue<int[]> pq = new PriorityQueue<>(new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
int o1Result = o1[0]*o1[0] + o1[1]*o1[1];
int o2Result = o2[0]*o2[0] + o2[1]*o2[1];
return o1Result-o2Result;
}
});
//queue์ addํ๋ ๋ถ๋ถ ์๋ต
int size = pq.size();
for(int i = 0; i<size; i++){
int[] data = pq.poll();
System.out.println(data[0]+","+data[1]+" : "+(data[0]*data[0]+data[1]*data[1]) );
}
/* ๊ฒฐ๊ณผ
-2,2 : 8
1,3 : 10
-4,1 : 17
*/
- ๋ด๋ฆผ์ฐจ์
๋ฐ๋๋ก ์์ ์์ ๋ถํฐ ๊ฑฐ๋ฆฌ๊ฐ ๋จผ ์์๋๋ก ์ถ๋ ฅํ๊ณ ์ ํ๋ค๋ฉด ์๋์ ๊ฐ์ด ์์ฑํ๋ฉด ๋๋ค.
//1. ๋๋ค์ ์ด์ฉ
Queue<int[]> pq = new PriorityQueue<>((a,b)->(b[0]*b[0]+b[1]*b[1])-(a[0]*a[0]+a[1]*a[1]));
//2. Comparator ์ด์ฉ
Queue<int[]> pq = new PriorityQueue<>(new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
int o1Result = o1[0]*o1[0] + o1[1]*o1[1];
int o2Result = o2[0]*o2[0] + o2[1]*o2[1];
return o2Result-o1Result;
}
});
//queue์ addํ๋ ๋ถ๋ถ ์๋ต
int size = pq.size();
for(int i = 0; i<size; i++){
int[] data = pq.poll();
System.out.println(data[0]+","+data[1]+" : "+(data[0]*data[0]+data[1]*data[1]) );
}
/* ๊ฒฐ๊ณผ
-4,1 : 17
1,3 : 10
-2,2 : 8
*/
728x90
๋ฐ์ํ
๋๊ธ