# [스택/큐][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