다음과 같이 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);
'알고리즘' 카테고리의 다른 글
c언어 포인터(연산) (0) | 2020.01.09 |
---|---|
c언어 포인터 (C pointer) (0) | 2020.01.07 |
프로그래머스 탑 자바스크립트로 풀기 (0) | 2019.12.24 |
[DFS] 프로그래머스 네트워크 Javascript 풀이 (0) | 2019.11.04 |
코드그라운드 개구리 뛰기 (0) | 2019.10.24 |