역시 그냥 문제에서 요구하는대로 구현하면 풀리는 문제입니다.
별로 설명할 게 없군요. 바로 코드로 넘어갑시다.
function solution(priorities, location) {
// 기본적으로 답은 1
let ans = 1;
// 1. 로직을 구현하기 쉽게 [[중요도, 인덱스], [중요도, 인덱스]] 형태로 가공합니다.
priorities = priorities.map((prioritie, index) => [prioritie, index]);
while (priorities.length) {
// 2. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
let head_task = priorities.shift();
if (priorities.every(prioritie => head_task[0] >= prioritie[0])) {
// 4. 문서(J)를 인쇄했는데 내가 요청한 문서였던 경우 탈출합니다.
if (head_task[1] == location) break;
// 인쇄 카운트 증가
ans++;
}
// 3. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.
else {
priorities.push(head_task);
}
}
return ans;
}