๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ/JAVA

[JAVA] Priority Queue(์šฐ์„ ์ˆœ์œ„ ํ) ์šฐ์„ ์ˆœ์œ„ ์กฐ๊ฑด ๋ณ€๊ฒฝํ•˜๊ธฐ

by ynzu๐Ÿค 2022. 2. 7.
๋ฐ˜์‘ํ˜•

 

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
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€