프로그래머스 프린터

문제

🔑 배열로 구현한 큐를 이용해서 풀어 줄 수 있다. shift() 함수를 사용해서 풀 수는 있지만 선형시간이 걸리므로 제대로 된 queue 로직이 아니다.

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 += 1;
    return value;
  }
  peek() {
    return this.queue[this.front];
  }
  size() {
    return this.rear - this.front;
  }
}

function solution(priorities, location) {
  const queue = new Queue();
  for (let i = 0; i < priorities.length; i++) {
    queue.enqueue([priorities[i], i]); // 큐에 값과 인덱스를 모두 넣어줌
  }
  priorities.sort((a, b) => b - a); // 우선 순위로 정렬
  let count = 0;
  while (queue.size() > 0) {
    const currentValue = queue.peek(); // 큐의 가장 앞 요소를 할당.
    if (currentValue[0] < priorities[count]) {
      // 앞 요소의 값과 우선순위 비교
      queue.enqueue(queue.dequeue()); // 우선순위의 값보다 작으므로 큐의 가장 뒤로 넣어줌
    } else {
      // 우선 순위 보다 클 경우
      const value = queue.dequeue();
      count++; // 요소가 하나 빠졌으므로 다음 우선순위를 이용
      if (location === value[1]) {
        // 빠진 요소의 인덱스와 location 비교
        return count;
      }
    }
  }
  return count;
}

© 2021. All rights reserved.

----------Powered by Hydejack----------

woobaeh