[프로그래머스 Lv.2] 알고리즘 고득점 Kit 스택/큐 - 프로세스

김민지·2024년 4월 10일
0

✨ 정답 ✨

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를 해주면 된다.

profile
이건 대체 어떻게 만든 거지?

0개의 댓글

관련 채용 정보