본문 바로가기

프로그래머스/스택, 큐

[큐] 프로그래머스 '프린터' - js

반응형

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/42587

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

2. 코드

function solution(priorities, location) {
    // 큐, 선입선출
    let done = [];
    // 내가 요청한 문서 판별을 위해 [값,인덱스] 쌍을 요소로 갖는 2차원 배열을 만듦
    let waitList = priorities.map((el, i) => [el, i]);
    
    // 대기 리스트에 남은 요소가 있을 때까지 반복
    while (waitList.length) {
        // 대기 리스트 맨 앞 요소
        const front = waitList.shift();
        // 만약 맨 앞 요소의 값이 대기 리스트의 요소들의 값 중 가장 큰 값보다 크거나 같으면
        // 출력 완료(done)배열에 넣어줌
        if (front[0] >= Math.max(...waitList.map(el => el[0]))) {
            done.push(front[1]);
            // 만약 내가 요청한 문서라면 break
            if (front[1] === location) break;
        } else {
            // 맨 앞 요소의 값보다 더 큰 값을 가진 문서가 있다면 대기 리스트의 맨 뒤로 보냄
            waitList.push(front);
        }
    }
    
    return done.indexOf(location) + 1;
}

+ max 값은 유동적이다. 대기 리스트에 있는 요소들 중 가장 큰 값이 max다! 처음부터 max를 고정하는게 아니라!ㅠㅠ 안되면 문제를 다시 읽어보고 생각해보자.

 

복기

4/14
반응형