article thumbnail image
Published 2022. 12. 18. 17:35

https://school.programmers.co.kr/learn/courses/30/lessons/42587

 

function solution(priorities, location) {
    const origin = priorities[location];
    priorities[location] = 'a'
    console.log(origin, priorities)
    let answer = 0; 
    while(true){
        const search = priorities.indexOf("a")
        priorities[search] = origin;
        const max = Math.max(...priorities)
        priorities[search] = "a";
        
        if(priorities[0] === "a"){
            // 대기열의 맨 앞에 있는 문서가 내가 뽑으려고 하는 문서가 맞다면
            if(origin === max){
                // 뽑으려고 하는 문서의 중요도가 대기열에서 가장 클 때
                return ++answer;
            }
        }
        
        if(priorities[0] === max){
            // 형재 가장 앞에 있는 문서가 가장 큰 중요도를 가지고 있다면
            // == 현재 문서를 인쇄한다.
            priorities.shift()
            answer++;   
        }else{
            // 현재 가장 앞에 있는 문서가 가장 큰 중요도가 아니라면
            // == 앞에 있는 문서를 뒤로 보낸다.
            priorities.push(priorities[0])
            priorities.shift();
        }
    }
    return answer
}

이번 알고리즘은 중요도에 따라서 배열의 위치를 조정하여 출력해야 한다는 조건이 있었다. 따라서 현재 출력하고자 하는 값이 배열에서의 중요도를 따져보아서 이를 판별하는 조건을 추가하고 해당 로직을 거쳐서 참인 경우에만 출력하고 아닌경우에는 맨 뒤로 보내도록 하였다. 로직 자체는 어렵지 않았지만 처음에 조건을 어떻게 걸어주어야 하는지 조금 고민했다!

복사했습니다!