https://programmers.co.kr/learn/courses/30/lessons/42587#
function solution(priorities, location) { var answer = []; //원소 값이 중복되면 indexOf로 원래 있던 위치 찾기 어려워 //priorities가 나중에 위치 바꿀 때 원래 배열의 인덱스를 확인하려고 만든 배열 var idxArr = priorities.map(function(a,i){ return i; }); while(true){ //priorities의 최대값 var bestPri = Math.max(...priorities); //priorities의 최대값 var bestPriIdx = priorities.indexOf(bestPri); if(bestPriIdx != 0){ priorities = priorities.slice(bestPriIdx, priorities.length).concat(priorities.slice(0, bestPriIdx)); idxArr = idxArr.slice(bestPriIdx, idxArr.length).concat(idxArr.slice(0, bestPriIdx)); } else{ // 최대값이 맨 앞에 있으니 프린트하고 원래 배열에서 제거 // 제거해야 이 값을 제외한 값들 중 또 최대값을 구할 수 있음) priorities.shift(); // 프린트 된 배열의 원래 자리 모아두는 곳에 값 추가함 // 위와 동일한 이유로 맨 앞 값 제거 answer.push(idxArr.shift()); // 우리가 찾고 있는 위치가 answer배열에 존재하면 무한루프 멈춤 if(answer.indexOf(location) != -1){ break; } } } //몇 번째로 프린트 됐는지에 대한 값을 반환하기 위해 배열의 길이를 반환함 return answer.length; }