━━━━ ◇ ━━━━
-/algo

[ALGO] 프로그래머스: 프린터

//프로그래머스: 프린터

//주어진 array에서 가장 큰 수를 찾아 반환한다.
function getMaxNum(array){
    let result = 0;
    array.forEach((n, i) => {
        if(n.num > result){
            result = n.num;
        }
    })
    return result;
}

//priorities와 기존 index를 모두 포함하도록 array를 생성한다
//만약 주어진 priorities가 [1, 1, 3, 2]라고 한다면,
//생성되는 array는 [{num: 1, loc: 0}, {num: 1, loc:1}, {num: 3, loc:2}, {num:2, loc:3}]이다
function createArray(priorities){
    let result = []
    priorities.forEach((num, loc) => {
        result.push({num, loc});
    })
    return result;
}

function getLocation(array, location){
    let result = 1;
    for(; array.length !== 0;){
        //maxNum, 즉 가장 큰 priority가 현재 문서의 priority와 같지 않다면
        //현재 문서를 맨 뒤로 보낸다.
        if(getMaxNum(array) !== array[0].num){
            array = array.slice(1).concat(array.slice(0, 1));
        }
        //현재 문서가 가장 큰 priority를 가지고 있지만, 원했던 문서는 아니므로
        //프린트하고 순서값을 1 증가시킨다
        else if(location !== array[0].loc){
            array = array.slice(1);
            result++;
        }
        //현재 문서가 가장 큰 priority를 가지고 있고, 그것이 원했던 문서라면 반환한다
        else{
            return result;
        }
    }
    //루프를 빠져나왔다면 찾지 못한것이므로 -1을 반환
    return -1;
}

function solution(priorities, location) {
    return getLocation(createArray(priorities), location);
}

 

'- > algo' 카테고리의 다른 글

[ALGO] 그래프 간선  (0) 2021.01.15
COMMENT
1 2