<코드>
function solution(priorities, location) {
var answer = 0;
let a = []
let arr = priorities.map((item, i) => [i, item])
for(let i = 0; i < priorities.length; i++) {
const sliced = arr.slice(i)
const max = Math.max(...sliced.map((item) => item[1]))
const index = sliced.findIndex((item) => item[1] === max)
arr = [...a, ...sliced.slice(index), ...sliced.slice(0, index)]
a.push([sliced[index][0], max])
}
return answer = arr.findIndex((item) => item[0] === location && item[1] === priorities[location]) + 1
}
<풀이>
priorities를 각 요소와 인덱스로 구성된 새로운 배열로 바꾼 후, 순회하면서 가장 큰 값을 찾아 정렬해나감
반복문 안에 메서드가 사용되어 O(n^2)의 시간 복잡도를 가짐
효율성이 좋지는 않지만 priorities의 길이의 제한 사항이 100이라 통과는 됨
다른 사람 풀이
function improvedSolution(priorities, location) {
let queue = priorities.map((priority, index) => ({ index, priority }));
let answer = 0;
while (queue.length > 0) {
let current = queue.shift();
if (queue.some(item => item.priority > current.priority)) {
queue.push(current);
} else {
answer++;
if (current.index === location) {
return answer;
}
}
}
}
some메서드를 사용해 queue의 우선 순위 중 맨 앞 요소보다 하나라도 큰 요소가 있다면 queue의 맨 뒤로 보내버림
맨 앞 요소의 우선 순위가 제일 높다면 queue에서 제거하고 카운트