운영체제의 역할 중 하나는 컴퓨터 시스템의 자원을 효율적으로 관리하는 것입니다. 이 문제에서는 운영체제가 다음 규칙에 따라 프로세스를 관리할 경우 특정 프로세스가 몇 번째로 실행되는지 알아내면 됩니다.
- 실행 대기 큐(Queue)에서 대기중인 프로세스 하나를 꺼냅니다.
- 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다.
- 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다.
3.1 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료됩니다.
console.log(solution([2, 1, 3, 2], 2)); // 1
console.log(solution([1, 1, 9, 1, 1, 1], 0)); // 5
function solution(priorities, location) {
const nQueue = [...priorities];
const indexQueue = priorities.map((_, i) => i);
const outTurn = [];
while (nQueue.length > 0) {
if (outTurn.at(-1) === location) {
break;
}
let maxN = Math.max(...nQueue);
if (nQueue[0] === maxN) {
outTurn.push(indexQueue[0]);
} else {
nQueue.push(nQueue[0]);
indexQueue.push(indexQueue[0]);
}
nQueue.shift();
indexQueue.shift();
}
return outTurn.length;
}
function solution(priorities, location) {
let result = 0;
const list = priorities.map((t, i) => ({
location: i === location,
priority: t,
}));
while (true) {
const firstEle = list.shift();
const ListhasMoreHighPriority = list.some(
(el) => el.priority > firstEle.priority
);
if (ListhasMoreHighPriority) {
list.push(firstEle);
} else {
result++;
if (firstEle.location) {
return result;
}
}
}
}
shift
를 이용해 list의 첫번째 요소를 뽑는다.some
메서드로 list 안에 뽑은 첫번째 요소보다 더 높은 우선 순위가 있는지 확인한다.