Algorithm/JavaScript

[프로그래머스] 프린터

🥭맹2 2021. 5. 8. 02:34

1. 문제

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

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

2. 접근 방법

push, shift 메서드를 사용해서 풀었다.

Math.max사용하려고 전개 구문 사용했다.

3. 코드

Javascript

function solution(priorities, location) {
    var answer = 0;
    let queue = [];
    
    for (let i=0; i<priorities.length; i++) {
        queue.push(i+10);
    }
    while (queue.length > 0) {
        let now = priorities[0]
        let max_val = Math.max(...priorities)
        if (now >= max_val) {
            priorities.shift();
            answer++;
            if (queue[0] === (location+10)) {
                return answer
            } else {
                queue.shift();
            }
        } else {
            priorities.push(priorities.shift());
            queue.push(queue.shift());
        }
    }
    
    return answer;
}

4. 마치며

자바스크립트 사용하는 메서드가 너무 적어서 코드의 가독성도 떨어지고 별로 맘에 안든다 ㅠ

function solution(priorities, location) {
    var arr = priorities.map((priority, index) => {
        return {
            index: index, priority: priority
        };
    });

    var queue = [];

    while(arr.length > 0) {
        var firstEle = arr.shift();
        var hasHighPriority = arr.some(ele => ele.priority > firstEle.priority);
        if (hasHighPriority) {
            arr.push(firstEle);
        } else {
            queue.push(firstEle);
        }
    }

    return queue.findIndex(queueEle => queueEle.index === location) + 1;
}

이건 다른 사람이 푼 건데, 

map으로 index와 priority를 묶어서 새로운 Object(변수명 arr)를 생성했다.

some() 메서드도 사용했다.

나는 if를 이용해서 했는데 ㅠ some해서 푸니까 너무 깔끔하당 8ㅅ8

그리고 마지막으로 findIndex()까지 ..!