배열의 길이가 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)임
난 기본적으로 정수만 비교했는데, 이후에 객체를 넣어서 사용하려면 비교 기준을 넣어줘야 한다고 한다. 이후에 더 추가해보겠다.