프린터

원지렁·2023년 3월 8일
0

알고리즘 정복기

목록 보기
6/12
post-thumbnail

프린터

문제

프린터의 작업순서 priorities와 출력하고 싶은 작업물의 location을 받아 location에 해당하는 작업물이 아래 규칙에 따랐을 때, 몇 번째로 출력되는지 리턴해야 함.

1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.
3. 그렇지 않으면 J를 인쇄합니다.

문제의 핵심

* queue 활용
1) priorities에서 가장 큰 요소가 배열의 맨 앞에 오도록 배치 함
2) 그 상태에서의 location을 기록해 둠
3) 이후 priorities를 queue의 형식으로 앞 요소부터 빼주고(shift()), rank를 +1, location을 -1 해주며 작업을 진행함
4) location < 0 이 되면 rank를 리턴함

function solution(priorities, location) {
    let rank = 1;
    while(priorities.length){
        if(priorities[0] < Math.max(...priorities)){
            if(--location < 0){
                location = priorities.length - 1;    
            }
            priorities.push(priorities.shift());
        } else {
            if(--location < 0){
                return rank;
            }
            priorities.shift();
            rank++;
        }
    }
}
profile
새싹 개발자 지렁이의 벨로그입니다.

0개의 댓글