난이도: Lv.2
문제: https://school.programmers.co.kr/learn/courses/30/lessons/42587
알고리즘
1. [프로세스 우선순위, 프로세스 인덱스] 배열을 주어진 순서대로 큐에 삽입한다.
2-1. 꺼낸 프로세스의 우선순위가 가장 높지 않은 경우 꺼낸 프로세스를 큐에 다시 삽입한다.
2-2. 꺼낸 프로세스의 우선순위가 가장 높고, location(몇 번째로 실행되는지 알고 싶은 프로세스의 위치)에 해당하는 프로세스라면 answer을 하나 증가시키고 반복문을 종료하고 결과를 반환한다.. answer은 지금까지 실행된 프로세스가 몇 개인지 나타내는 변수다.
2-3. 꺼낸 프로세스의 우선순위가 가장 높지만 location에 해당하는 프로세스가 아니면 answer을 하나 증가시킨다.
코드
function solution(priorities, location) {
var answer = 0;
const Queue = priorities.map((process, idx) => [process, idx]);
while (Queue.length) {
let currentProcess = Queue.shift();
if (Queue.find((process) => currentProcess[0] < process[0])) {
Queue.push(currentProcess);
} else if (currentProcess[1] === location) {
answer++;
break;
} else { answer++; }
}
return answer;
}
주저리
js에는 큐는 없지만 배열의 shift() 메서드를 쓰면 큐를 흉내낼 수 있다. 강의 들을 때 shift()를 쓰면 배열의 모든 원소들이 한 칸씩 이동해야 해서 pop() 보다 느리다는 말을 들어서 shift()를 써서 큐처럼 쓸 수 있을까 했는데 생각해 보니까 큐 동작도 별반 다를 것 없다는 생각이 들었다. 우선순위 다루는 것도 수업 시간에 많이 해봐서 그런지 문제도 금방 이해하고 코드도 금방 짤 수 있었다.
'코딩테스트' 카테고리의 다른 글
[JS] 전화번호 목록 (1) | 2023.12.21 |
---|---|
[JS] [1차] 뉴스 클러스터링 (1) | 2023.12.20 |
[JS] 기능개발 (1) | 2023.12.18 |
[JS] 튜플 (1) | 2023.12.12 |
[JS] [1차] 캐시 (0) | 2023.12.11 |