재귀함수를 통하여 우선순위를 계산하고, 위치를 계산하는 난잡한 코드로 해결하였다
function rePriorities(priorities){
let tmp = priorities[0];
for(let i = 0 ; i < priorities.length-1; i++){
priorities[i] = priorities[i+1];
}
priorities[priorities.length-1] = tmp;
return priorities;
}
function printDocs(priorities, find_index, count){
let max = Math.max(...priorities);
if(max === priorities[0] && find_index[0]){
return count;
} else if (max === priorities[0] && !find_index[0]){
count++;
return printDocs(priorities.slice(1,priorities.length),
find_index.slice(1, find_index.length),
count);
} else {
return printDocs(rePriorities(priorities),
rePriorities(find_index),
count)
}
}
function solution(priorities, location) {
let find_index = new Array(priorities.length).fill(false);
find_index[location] = true;
console.log(printDocs(priorities, find_index, 1));
return printDocs(priorities, find_index, 1);
}
수행되는 문서의 이름을 우선 '*'로 채워넣고 찾아야 할 문서의 이름만 location으로 설정하여 문서들의 이름을 옮기는 방법으로 구현하였다
그리고 반복문은 우선순위의 배열이 모두 제거 될 때까지 실행하였다
최종 코드는 다음과 같다
function solution(priorities, location) {
// 완료된 문서의 이름을 담을 배열
let successTaskName = [];
// 입력된 문서 이름들을 초기화
let taskNames = new Array(priorities.length).fill('*');
// 찾아야 할 문서만 이름 변경
taskNames[location] = 'location'
while(priorities.length != 0){
// 맨 앞의 일을 가져오고
const currentTask = priorities.shift();
const name = taskNames.shift();
// 남은 일들의 최댓값보다 작으면 맨 뒤로 옮겨준다
if(Math.max(...priorities) > currentTask){
priorities.push(currentTask);
taskNames.push(name);
} else {
// 작업할 문서가 최대값이면 이를 완료 스택에 넣어줌
successTaskName.push(name);
}
}
// 인덱스 값에 더하기 1을 하여 최종 문제 해결
return successTaskName.indexOf('location') + 1
}