# [스택/큐][Lv2] 프린터 - 자바스크립트 js

# 프로그래머스 문제

https://programmers.co.kr/learn/courses/30/lessons/42587 (opens new window)

# 시도 1.

생각한대로 코딩했는데 한번에 풀렸음..

  • 첫번째 요소를 뽑는다.
  • 첫번째 요소의 중요도와 나머지 대기 목록중 가장 높은 중요도를 비교한다.
  • 높은 문서가 있다면 push, 없다면 그대로 출력.
  • 요소의 위치 변경이 있었으니 타겟요소의 로케이션을 조정한다.
function solution(priorities, location) {
    var answer = 0;
    var firstEl = 0;
    
    while(true){
        firstEl = priorities.shift();
        
        // 나머지 인쇄 대기목록에서 현재 대상보다 중요도가 높은 문서 존재 => 가장 마지막에 push
        if( firstEl < Math.max(...priorities) ){
            priorities.push(firstEl);
            if (location === 0) location = priorities.length-1;
            else location--;
        } else { // 출력
            answer++;
            if (location === 0) break;
            else location--;
        }
        
    }

    return answer;
}
정확성  테스트
테스트 1 〉	통과 (0.07ms, 29.8MB)
테스트 2 〉	통과 (0.39ms, 30MB)
테스트 3 〉	통과 (0.10ms, 30.1MB)
테스트 4 〉	통과 (0.09ms, 30MB)
테스트 5 〉	통과 (0.08ms, 30MB)
테스트 6 〉	통과 (0.12ms, 30MB)
테스트 7 〉	통과 (0.07ms, 30MB)
테스트 8 〉	통과 (0.17ms, 30.1MB)
테스트 9 〉	통과 (0.09ms, 30.1MB)
테스트 10 〉	통과 (0.13ms, 30.2MB)
테스트 11 〉	통과 (0.26ms, 30MB)
테스트 12 〉	통과 (0.06ms, 30MB)
테스트 13 〉	통과 (0.22ms, 30.1MB)
테스트 14 〉	통과 (0.05ms, 30.1MB)
테스트 15 〉	통과 (0.09ms, 30MB)
테스트 16 〉	통과 (0.10ms, 30MB)
테스트 17 〉	통과 (0.34ms, 29.8MB)
테스트 18 〉	통과 (0.08ms, 30MB)
테스트 19 〉	통과 (0.15ms, 30.1MB)
테스트 20 〉	통과 (0.10ms, 30MB)
채점 결과
정확성: 100.0
합계: 100.0 / 100.0

# 다른 사람 답변 통해 배워보기

  1. 나 역시 문제를 보고 나서 해당 값들과 순서를 키-밸류 ⇒ 위치-우선순위로 저장해두고 할까? 생각이 들었었는데 역시 그렇게 푸신 분들이 계신다. 다만 이렇게 가면 모든 요소를 배열 함수로 탐색해야 해서 그냥 안했는데 나도 Math 함수를 사용했으니.. 어떤게 효율이 더 좋은걸까?

    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;
    }
    
Last Updated: 8/11/2022, 5:17:02 AM