위에 코드는 위에서 말한 pop메서드를 구현한 코드이다. queue라는 배열의 요소를 하나하나 탐색하며, 그 요소의 인덱스 0에 있는 우선순위 중에 가장 큰 순위를 찾아내고, 그 다음 for문에서 이전 for문에서 찾은 우선순위에 해당하는 요소를 삭제해준다. 이렇게 하면 O(n) + O(n) = 결국 O(n)의 시간복잡도를 가지게 된다.
아래 코드는 위의 pop을 바탕으로 작성한 top() 메서드이다(우선순위가 가장 높은 요소를 출력하는 메서드).
마지막으로 가장 간단한 push()메서드이다.
이렇게 구현한 우선순위 큐는 시간복잡도 측면에서 너무나도 비효율적이다. why? 만약 십만개의 요소를 pop한다고 생각해보자. 물론 push를 할 때는 O(십만)이므로 그렇게 부담스럽지 않은 복잡도를 가지지만, pop을 십만개하면 얘기가 달라진다. 한개를 pop할 때 O(N)의 시간복잡도를 갖는 pop메서드를 십만번을 사용한다면 결국 O(N**2)이 돼서 너무나도 비효율적인 시간복잡도를 가지게 된다.
그렇다면 좀더 효율적인 우선순위 큐를 구현할 수는 없을까??