[프로그래머스 / JS] Lv 2 프로세스

타래·2023년 9월 25일
0

후기

처음 문제를 풀 땐 잘 몰랐지만, 배열에서 shift() 사용을 지양하는게 좋은 것 같다.
shift()는 선형시간이 소요되므로, 코드 실행속도에 크게 영향을 줄수도 있는 것이 그 이유이다.
풀어보진 않았지만 팀원분의 말씀으로는, 백준에는 shift()를 사용하면 실패 처리되는 문제도 있다고 한다.

때문에 class로 queue를 배열로 구현하는 방법으로 문제를 풀어보았다.

중간에 dequeue() 메서드에 의해 queue 배열 내부에서 Empty Itmes를 만들어내지만,
front와 rear를 활용했기도 하고, 크게 배열 내부 메모리에 신경쓰지않아도 된다면 괜찮은 것 같다.


코드

class Queue {
  constructor() {
    this.queue = [];
    this.front = 0;
    this.rear = 0;
  }

  enqueue(value) {
    this.queue[this.rear++] = value;
  }

  dequeue() {
    const value = this.queue[this.front];
    delete this.queue[this.front];
    this.front++;
    return value;
  }

  peek() {
    return this.queue[this.front];
  }
}

function solution(priorities, location) {
    const myQueue = new Queue();
    for (let i = 0; i < priorities.length; i++) {
        myQueue.enqueue([priorities[i], i]);
    }

    priorities.sort((a, b) => b - a);

    let count = 0;

    while (1) {
        const currentValue = myQueue.dequeue();
        if (currentValue[0] < priorities[count]) {
            myQueue.enqueue(currentValue);
        } else {
            count++;
            if (currentValue[1] === location) break;
        }
    }
    return count;    
}

0개의 댓글