function solution(priorities, location) {
// location이 같이 움직이는걸로.
let answer=0;
let isDone=false;
while(!isDone){
let max=Math.max(...priorities);
if (priorities[0]===max){
answer+=1;
if (location===0){
isDone=true;
}else{
priorities.shift();
location-=1;
}
}else{
let temp=priorities.shift();
priorities.push(temp);
if (location===0){
location=priorities.length-1;
}else{
location-=1;
}
}
}
return answer;
}
priorities[location]과 같은 숫자가 여러 개일 수 있어서 priorities[location]을 -1로 변경해두고 차례가 오면 그에 맞는 처리를 해주려 했는데 시간초과가 났다.
이에.. 어쩔 수 없이 location을 같이 옮기면서 풀었다.
isDone 변수를 while문 조건문에 넣고, isDone이 true가 될 때까지 내부 코드를 실행했다.
priorities에서 가장 큰 숫자가 맨 앞에 왔을 때 꺼낼 수 있으므로 priorities[0]가 max와 같을 경우 answer+1을 해 주었다. 또, location이 0인 경우에는 목표로 하는 프로세스가 처리되는 것이므로 isDone을 true로 변경하여 while문 실행을 끝내주었다.
location이 아닌 경우에는 priorities[0]를 제거하고 location에서는 1을 빼 자리를 앞당겨주었다.
priorities[0]가 max와 같지 않은 경우에는 맨 앞 프로세스를 맨 뒤로 보내주어야 하기 때문에 맨 앞 프로세스를 꺼내 temp라는 변수에 잠시 보관했다가 다시 맨 뒤에 push 해주었다.
이 작업을 한 후에는 location 위치를 조정해주어야 하는데, 만약 location이 0이었을 경우에는 맨 뒤로 보내지게 되므로 priorities.length-1를 해주어야 하며, 그렇지 않다면 그냥 한 칸 앞당겨주는 location-=1를 해주면 된다.