Programmers - 프린터

Doodream·2021년 3월 22일
0

코딩테스트

목록 보기
7/22
post-thumbnail

💻 프린터


❓ 문제

https://programmers.co.kr/learn/courses/30/lessons/42587?language=javascript

✔️ 코드

function solution(priorities, location) {
    let printOrder = [];
    // 프린트된 문서를 순서대로 모아 놓는배열
    let printOrderLocation = [];
    // 프린트된 문서의 원래 순서를 기록해놓는 배열
    let prioritiesLocation = [];
    // 프린트 된 문서의 중요도의 위치를 기록해 놓는 배열

    for (let i = 0; i < priorities.length; i++) {
        prioritiesLocation[i] = i;
    }
    // J의 위치를 추적하기 위해서 원래 J의 인덱스를 J와 완전히 동일하게 움직인다. 
    // 위치는 [0, 1, 2, 3, ..., priorities.length - 1]로 기록되며 J가 이동하는 순서랑 완벽히 동일하게 움직인다. 

    while (priorities.length !== 0) {
        // 가장 앞의 문자가 J가 된다.
        let J = priorities.shift();

        // J의 원래 위치를 추적하기 위해서 J와 동일하게 움직인다. 
        let Jlocation = prioritiesLocation.shift();
        if (J < Math.max(...priorities)) {
            // 대기열의 문서중에 J보다 중요한 것이 있다면 
            priorities.push(J);
            prioritiesLocation.push(Jlocation);
        } else {
            // 없다면 
            printOrder.push(J);
            printOrderLocation.push(Jlocation);
        }
    }

    // 원래 J의 위치를 추적해서 + 1을 해주면 답. 
    var answer = printOrderLocation.indexOf(location) + 1;
    return answer;
}

let priorities = [1, 1, 9, 1, 1, 1];
// 전역 객체에 변수중에 location이 들어가있어서 재 선언시 호이스팅 문제가 발생, location 변수명을 다르게 해준다. 
let location2 = 0;

console.log(solution(priorities, location2));

❗️풀이과정

문제에서 진행하는 과정을 착실하게 구현하는 문제이다.
J는 프린터 대기열중에 가장 앞에 있는 원소로서 프린트 대기열이 priorities 이므로 shift() 함으로서 빼내어 반환한다.

이후 J가 프린트 대기열중에서 중요도가 가장 큰 것이 아니라면 대기열 맨뒤로 push,

그렇지 않다면 출력한다.

중요한 점은 J가 원래 대기열에서 가지고 있는 location 위치를 추적하기 위해서 J가 움직이는 형태와 동일하게 J의 index를 움직여야 한다. 그렇게 하기 위해서 priorities의 인덱스를 가지는 배열(prioritiesLocation) 과
J가 출력되면 추적된 J의 location을 담을 printOrderLocation 배열을 추가한다.

두개의 배열은 J가 움직이는 과정내에서 동일한 과정을 따라 구현한다.

배운점

  • Math.max()에서 배열중 가장 큰값을 구하려면 ... (spread 문법을 통해서 배열의 원소를 빼내어 넣어야한다)

  • 배열의 가장 앞을 빼내어 반환하려면 arr.shift(), 가장 뒤는 arr.pop()

  • 배열의 가장 앞에 삽입 하려면 arr.unshift(a) : 추가된 배열의 총길이를 반환

  • 배열의 가장 뒤에 삽입 하려면 arr.push(a) : 추가된 배열의 총길이를 반환

profile
일상을 기록하는 삶을 사는 개발자 ✒️ #front_end 💻

0개의 댓글