Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트로 PriorityQueue에서 요소 엿보기(peek) 구현하기

우선순위 큐(PriorityQueue)에서 엿보기(peek)란, 요소를 실제로 제거하지 않은 채 가장 높은 우선순위를 가진 값을 확인하는 동작을 의미합니다. 즉, 큐의 맨 앞에 있는 데이터가 무엇인지 살펴보기만 하는 기능입니다.

이러한 peek 함수는 다음과 같이 간단하게 구현할 수 있습니다.

peek() 구현 예제

peek() {
    if (isEmpty()) {
        console.log("Queue Underflow!");
        return;
    }
    return this.container[this.container.length - 1];
}

먼저 큐가 비어 있는지 확인하고, 비어 있다면 "Queue Underflow!" 메시지를 출력한 뒤 종료합니다. 큐에 요소가 있다면 컨테이너의 마지막 요소, 즉 가장 높은 우선순위를 가진 항목을 반환합니다.

동작 확인하기

구현한 peek 함수가 정상적으로 작동하는지 아래 코드로 확인해 보겠습니다.

let q = new PriorityQueue(4);
q.enqueue("Hello", 3);
q.enqueue("World", 2);
q.enqueue("Foo", 8);
console.log(q.peek());
q.display();

실행 결과

위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

{ data: 'Foo', priority: 8 }
[ { data: 'World', priority: 2 },
   { data: 'Hello', priority: 3 },
   { data: 'Foo', priority: 8 } ]

peek()와 dequeue()의 차이점

출력 결과에서 알 수 있듯이, peek()는 우선순위가 가장 높은 값인 { data: 'Foo', priority: 8 }를 반환하지만 큐에서 해당 요소를 제거하지 않습니다. 이후 호출된 display() 메서드의 결과를 보면 'Foo' 항목이 여전히 큐 안에 그대로 남아 있는 것을 확인할 수 있습니다.

반면 dequeue()는 맨 앞의 요소를 반환하면서 동시에 큐에서 제거하기 때문에, 같은 작업을 반복 실행하면 매번 다른 결과가 나오게 됩니다. 따라서 큐의 상태를 변경하지 않고 최우선 요소만 확인하고 싶을 때 peek 함수를 활용하는 것이 좋습니다.