[Java] Priority Queue(우선 순위 큐)

pastaCoder·2022년 12월 29일
0

알고리즘

목록 보기
1/1

배열의 길이가 n이라할때 k(k <= n)에 대해 배열에서 k번째까지 큰 수를 뽑아내려했는데
ex)
[4, 2, 4, 5, 3, 3, 1]이라는 배열이 있을때 3번째까지 큰 수를 추출하면 5 4 4임

이걸 어떻게 구현할까 생각해봤는데, 처음에는 HashMap에 원래 배열의 인덱스와 값을 담아 map 정렬 후 인덱스를 꺼내는 방법을 사용하려했다. 근데 막상 구현해보니 너무 복잡하고 다른방법이 없을까 찾아봤는데 우선순위 큐 라는 자료형이 있다고한다.

// enemy는 정수 배열임
PriorityQueue<Integer> pq = new PriorityQueue<>();
        Arrays.stream(enemy)
                .forEach(i -> {
                    System.out.println("i: " + i);
                    pq.add(i);
                    System.out.println("pq: " + pq);
                });

이런식으로 사용하면 되는데 pq.poll()을 하게되면 큰 값부터 출력됨

내부구조가 힙으로 이루어져 내가 작성한 로직보다 훨씬 처리속도가 빠름.
우선순위큐는 시간 복잡도 O(NLogN)임

난 기본적으로 정수만 비교했는데, 이후에 객체를 넣어서 사용하려면 비교 기준을 넣어줘야 한다고 한다. 이후에 더 추가해보겠다.

0개의 댓글