본문 바로가기

알고리즘

우선순위 큐 올바른 dequeue

다음과 같이 enqueue와 dequeue메서드를 포함한 클래스가 있다.

class PriorityQueue {
  constructor() {
    this.store = [];
  }
  enqueue(item) {
    this.store.push(item);
  }
  dequeue() {
    let start = 0;
    this.store.forEach((item, index) => {
      if (this.store[start][1] > this.store[index][1]) { // 가장 작은것을 찾음
        start = index;
      }
    });
     return this.store.splice(start, 1);
  }
}

처음에는 아래의 코드 처럼 dequeue를 만들때 sort를 한다음 맨 처음의 값을 shift를 통해서 빼려고 했다. 하지만, 이렇게 하면 시간복잡도가 올라가게 된다.

this.store.sort(function(a, b){
  return a[1] - b[1]
})
return this.store.shift();        

대신에 아래와 같이 dequeue를 할때 최소값이 들어인는 index를 찾고 splice를 하면 간단한게 최솟값을 우선순위로 dequeue할 수 있다.

this.store.forEach((item, index) => {
  if (this.store[start][1] > this.store[index][1]) { // 가장 작은것을 찾음
    start = index;
  }
});
return this.store.splice(start, 1);