[알고리즘] 프로그래머스 42587

do_large·2022년 1월 16일
2

알고리즘

목록 보기
48/50

https://programmers.co.kr/learn/courses/30/lessons/42587?language=javascript

스택/큐 문제를 풀어보았다.

코드

이 문제는 queue 자료구조를 사용해서 풀었다.
프린트의 순서를 정하는것까지는 어렵지 않았는데,
특정 index에있는 프린트의 출력 순서를 구하는 부분에서 약간 막혔다.
그래서 targetIndex, printExcutedCount 변수를 사용해서 내가 감시해야하는 값의 currentIndex와 지금까지 print된 인쇄물의 개수를 count하면서 while문을 돌렸다.

function solution(priorities, location) {
   const queue = [...priorities];
    let topPriority = Math.max(...queue);
    
    let targetIndex = location;
    let printExcutedCount = 0;
    
    while(queue.length !== 0){
        if(queue[0] === topPriority) {
            queue.shift();
            topPriority = Math.max(...queue);
            printExcutedCount++;
             if(targetIndex === 0){
                break;
             }else{
                targetIndex--;
             }
        }else{
            const target = queue.shift();
            queue.push(target);
            if(targetIndex === 0){
                targetIndex = queue.length - 1;
            }else{
                targetIndex--;
            }
        }
    }
    
    return printExcutedCount;
}

내가 푼 방식에서 중요한 지점은

 if(queue[0] === topPriority) {
            queue.shift();
            topPriority = Math.max(...queue);
            printExcutedCount++;
             if(targetIndex === 0){
                break;
             }else{
                targetIndex--;
             }
        }

인데,

프린트들 중에서 가장 우선순위가 높은 프린트의 우선순위를 topPriority에 넣어놓고,
현재 큐의 0번째 인덱스와 값을 비교해 출력할수있는지를 검사하고,

만약 출력대상이 된다면 printExcutedCount값을 1 더하고, targetIndex(내가 감시해야하는 프린트물)도 0일때 실행을 종료시켜 printExcutedCount를 반환한다.


생각보다 어려운문제는 아니었지만, 오랜만에 푸니깐 시간이 좀 걸렸다.

0개의 댓글