# [스택/큐][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
# 다른 사람 답변 통해 배워보기
나 역시 문제를 보고 나서 해당 값들과 순서를
키-밸류
⇒위치-우선순위
로 저장해두고 할까? 생각이 들었었는데 역시 그렇게 푸신 분들이 계신다. 다만 이렇게 가면 모든 요소를 배열 함수로 탐색해야 해서 그냥 안했는데 나도 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; }