🖋️ 프로그래머스 스택/큐
@ 프로세스
- 운영체제의 역할 중 하나는 컴퓨터 시스템의 자원을 효율적으로 관리
- 다음 규칙에 따라 프로세스를 관리할 경우 `특정 프로세스가 몇 번째로 실행되는지 알아내기
- 실행 대기 큐(Queue)에서
대기중인 프로세스 하나를 꺼내기
- 큐에 대기중인 프로세스 중
우선순위가 더 높은 프로세스가 있다면
방금 꺼낸 프로세스를 다시 큐에 넣기
- 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행
3.1 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료
- 현재 실행 대기 큐(Queue)
- 프로세스의 중요도가 순서대로 담긴 배열 priorities
- 몇 번째로 실행되는지 알고싶은 프로세스의 위치를 알려주는 location
function solution(priorities, location) {
const arr = priorities.map((v, index) => (
{index: index, priority: v }
));
const queue = [];
while(queue.at(-1)?.index !== location) {
const cur = arr.shift();
const hasHighPriority = arr.some(e => e.priority > cur.priority);
if (hasHighPriority) {
arr.push(cur);
} else {
queue.push(cur);
}
}
return queue.length;
}
function solution(priorities, location) {
const list = priorities.map((t,i)=>({
my : i === location,
val : t
}));
let count = 0;
while(true){
const cur = list.shift();
if(list.some(t => t.val > cur.val)){
list.push(cur);
} else {
count++;
if(cur.my) return count;
}
}
}
@ 다리를 지나는 트럭
- 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너기
모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지
구하기
- 다리에는 트럭이 최대 bridge_length대 가능
- 다리는 weight 이하까지의 무게 가능
- 단, 다리에 완전히 오르지 않은 트럭의 무게는 무시
function solution(bridge_length, weight, truck_weights) {
let time = 0, qu = [[0, 0]], weightOnBridge = 0;
while (qu.length > 0 || truck_weights.length > 0) {
if (qu[0][1] === time) weightOnBridge -= qu.shift()[0];
if (weightOnBridge + truck_weights[0] <= weight) {
weightOnBridge += truck_weights[0];
qu.push([truck_weights.shift(), time + bridge_length]);
} else {
if (qu[0]) time = qu[0][1] - 1;
}
time++;
}
return time;
}