-
프린터Coding Test/Programmers Level 2 2022. 3. 27. 01:11
문제
https://programmers.co.kr/learn/courses/30/lessons/42587
코드
function solution(priorities, location) { var indicies = Array.from(new Array(priorities.length), (_, i) => i); var sortedValues = []; var sortedIndicies = []; while(priorities.length !== 0){ var head = priorities.shift(); var indexHead = indicies.shift(); if(priorities.every(priority => priority <= head)){ sortedValues.push(head); sortedIndicies.push(indexHead); } else { priorities.push(head); indicies.push(indexHead); } } return sortedIndicies.indexOf(location) + 1; }
풀이
이 문제는 큐를 활용하여 풀 수 있는 문제이며,
우선순위 대로 정렬하기만 하면 되는 것이 아니라 우선순위의 인덱스가 어떻게 변했는 지를 알 수 있어야 한다.
따라서 우선 우선순위 배열의 길이에 상응하는 인덱스 배열을 생성했다.
그리고 priorities 를 일종의 큐로 취급해서 length 가 0 이 될 때까지 로직을 반복한다.
priorities 는 우선순위 배열, indicies 는 우선순위의 인덱스 배열 이므로
둘의 가장 앞 요소를 제거한 뒤 우선순위 요소가 priorities 중 가장 큰 수 이상인 경우
프린트가 실행된 요소를 담을 배열인 sortedValues, sortedIndicies 에 차례대로 푸시한다.
만약 맨 앞 우선순위가 가장 큰 수가 아니라면 출력할 수 없으므로
다시 priorities 와 indicies 에 각각의 가장 앞 요소를 추가한다.
그리고 답이 요구하는 것은 나의 문서가 인쇄되는 순서이므로
sortedIndicies 에 담긴 요소 중 location(원래 인덱스) 과 동일한 값을 갖는 요소의 인덱스에 1을 더해주면 된다.
1을 더해주는 이유는 Array 의 첫 인덱스가 0 이기 때문이다.
'Coding Test > Programmers Level 2' 카테고리의 다른 글
기능개발 (0) 2022.03.29 올바른 괄호 (0) 2022.03.27