프론트엔드 개발자의 기록 공간

[프로그래머스 JavaScript] 프린터 본문

알고리즘_JS/프로그래머스_Level2

[프로그래머스 JavaScript] 프린터

[리우] 2021. 7. 22. 22:13

🚩 프로그래머스 Level2 프린터 -> 스택/큐

 

📖 문제 설명

문제가 명확하게 설명되어 있어서 생략하겠습니다.

priorities 순위가 적혀있는 배열과 location 인쇄를 요청한 위치가 주어질때

해당 위치에 해당하는 문서가 몇번째로 출력되는지 파악하면 됩니다.

 

👉 소스 코드  ⏰시간복잡도 O(n^2)

function solution(priorities, location) {
    var answer = 0;
    //prioritiese와 쌍을 이루어 중요도에 따른 대기목록 순서를 가진다.
    let print = Array.from({length: priorities.length}, (v,i) => i);
    console.log(print)
    //인쇄를 요청한 문서의 중요도와 순서가 담겨져있다.
    let find = [priorities[location] ,location];
    
    while(priorities.length !== 0){
        let key = priorities.shift();//중요도
        let value = print.shift();//대기목록
        let max = Math.max(...priorities);//중요도 최대값
        
        //현재 문서가 중요도가 가장 크고 인쇄를 요청한 문서일시
        if(key >= max && key===find[0] && value === find[1]){
            return ++answer;
        }
        //현재 문서가 중요도만 제일 클시
        //-> 출력만 수행
        else if(key >= max){
            ++answer;
        }
        //요청한 인쇄가 아니고 중요도가 낮은 문서일시
        //-> 제일 뒤로 보내버린다.
        else{
            priorities.push(key);
            print.push(value);
        }
    }
                
    return answer;
}

 

👨‍💻 코드 설명

해당 priorities배열은 중요도만 있고 중복이 있으므로  주어진 위치 location의 문서 중요도와 순서를 알아야합니다.

이를 위해 print배열에 순서 [0, 1, 2, ...]와 find 배열에 요청한 인쇄 정보를 저장합니다.

이후,  배열이 없어질때 까지 priorities중요도와, print순서도를 앞에서 차례로 꺼내 find배열과 비교합니다. 

찾는 문서일 경우는 횟수 증가 후 return을 해줍니다.

찾는 문서가 아니지만 중요도만 제일 클 시, 횟수만 증가해줍니다.

찾는 문서도 아니고 중요도도 작다면 제일 뒤에 해당값을 다시 넣어줍니다.

728x90
Comments