프로그래머스 프린터
🔑 배열로 구현한 큐를 이용해서 풀어 줄 수 있다. 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;
}