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

[스택/큐] level2 프린터

javascript

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

제한사항
  • 현재 대기목록에는 1개 이상 100개 이하의 문서가 있습니다.
  • 인쇄 작업의 중요도는 1~9로 표현하며 숫자가 클수록 중요하다는 뜻입니다.
  • location은 0 이상 (현재 대기목록에 있는 작업 수 - 1) 이하의 값을 가지며 대기목록의 가장 앞에 있으면 0, 두 번째에 있으면 1로 표현합니다.

입출력 예
prioritieslocationreturn
[2, 1, 3, 2]21
[1, 1, 9, 1, 1, 1]05

코드
function solution(priorities, location) { //중요도, 요청 문서 index
    let target_index = location; //user가 선택한 index
    let answer = 1;
    let first = -1;
    
    while (priorities.length > 0) {
        //1. 가장 앞에 있는 문서를 추출
        first = priorities.shift();
        //2. 중요도 높은 문서가 존재 시 뒤로 넣음
        if (priorities.some((value, index) => value > first)) {
            priorities.push(first);
        }
        else {
            if (target_index === 0) {
                break;
            }
            else answer ++;
        }
        /*3. 사용자가 선택한 문서가 중요도가 제일 높지 않은 경우
             현재 대기목록의 맨 끝으로 index를 옮긴다.
        */
        if (target_index === 0) target_index = priorities.length - 1;
        else target_index --;
    }
    return answer;
}

댓글