문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
핵심 아이디어
- 각 프로세스의 우선순위와 인덱스를 객체로 저장해 큐를 생성한다.
- 큐는 먼저 들어온 프로세스가 먼저 처리되는 선입선출(FIFO) 방식으로 작동한다.
- 큐에서 첫 번째 프로세스를 꺼낸 후, 남은 프로세스 중 더 높은 우선순위가 있는지 some 메서드를 사용해 확인한다.
- 더 높은 우선순위의 프로세스가 있으면 꺼낸 프로세스를 다시 큐에 넣는다.
- 더 높은 우선순위가 없으면 해당 프로세스를 실행하고, 실행 순서를 기록한다.
- 기록된 실행 순서 중에서 원하는 location의 프로세스가 몇 번째로 실행되었는지 반환한다.
정답
function solution(priorities, location) {
let queue = priorities.map((priority, index) => ({ priority, index }));
let answer = [];
let order = 1;
while (queue.length > 0) {
let current = queue.shift();
if (queue.some(x => x.priority > current.priority)) {
queue.push(current);
} else {
answer.push({ index: current.index, order });
order++;
}
}
return answer.filter(x => x.index === location)[0].order;
}