Notice
Recent Posts
Recent Comments
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Today
Total
관리 메뉴

차차로그

[JS] 스택/큐 > 프린터 본문

코딩테스트

[JS] 스택/큐 > 프린터

차차한 2022. 9. 21. 15:57

function solution(priorities, location) {

    var list = [];
    var arr = [];
    
    for(var i in priorities){
        
        list[i] = [i, priorities[i]];
    }

    while(list.length){
    
        var first = list.shift();
        
        var max = 0;
        for(var i in list){
            max = Math.max(max, list[i][1])
        } 
    
        if(first[1] < max){
            list.push(first);
        }else{
            arr.push(first);
        }    
    }
    
    for(var i in arr){

        if(arr[i][0] == location){
            return parseInt(i) + 1;
        }
    }
}

내 문서의 인쇄순서를 알아야하기 때문에 주어진 priorities에서의 인덱스 번호를 문서의 번호로 설정하고 새로운 배열을 만들어준다.

  -> list = [ [ '0', 2 ], [ '1', 1 ], [ '2', 3 ], [ '3', 2 ] ]

list에 값이 있을 때까지 반복을 돌리면서 주어진 조건을 처리한다.

list의 가장 처음 값을 shift로 꺼내 first 변수에 담아준다.

그 후에 남아있는 list에서 우선순위가 높은 값을 max에 담아준다.

first의 우선순위(== first[1])가 max보다 낮다면 다시 list에 넣어주고 같거나 크다면 인쇄배열인 arr에 넣어준다.

  -> arr = [ [ '2', 3 ], [ '3', 2 ], [ '0', 2 ], [ '1', 1 ] ]

이제 우선순위대로 정렬이 되어 2번 문서, 3번 문서, 0번 문서, 1번 문서대로 출력이 될 것이다.

리턴은 내 문서가 몇 번째로 인쇄되는지를 리턴해줘야 하니 arr배열을 반복해 문서 번호가 location과 동일하다면 해당 문서번호에 1을 더해 리턴해준다 (문서번호를 인덱스로 했기 때문에 1을 더해줘야 첫 번째 순서, 두 번째 순서 등이 됨)

Comments