차차로그
[JS] 스택/큐 > 프린터 본문
function solution(priorities, location) {
var list = [];
var arr = [];
for(var i in priorities){
list[i] = [i, priorities[i]];
}
while(list.length){
var first = list.shift();
var max = 0;
for(var i in list){
max = Math.max(max, list[i][1])
}
if(first[1] < max){
list.push(first);
}else{
arr.push(first);
}
}
for(var i in arr){
if(arr[i][0] == location){
return parseInt(i) + 1;
}
}
}
내 문서의 인쇄순서를 알아야하기 때문에 주어진 priorities에서의 인덱스 번호를 문서의 번호로 설정하고 새로운 배열을 만들어준다.
-> list = [ [ '0', 2 ], [ '1', 1 ], [ '2', 3 ], [ '3', 2 ] ]
list에 값이 있을 때까지 반복을 돌리면서 주어진 조건을 처리한다.
list의 가장 처음 값을 shift로 꺼내 first 변수에 담아준다.
그 후에 남아있는 list에서 우선순위가 높은 값을 max에 담아준다.
first의 우선순위(== first[1])가 max보다 낮다면 다시 list에 넣어주고 같거나 크다면 인쇄배열인 arr에 넣어준다.
-> arr = [ [ '2', 3 ], [ '3', 2 ], [ '0', 2 ], [ '1', 1 ] ]
이제 우선순위대로 정렬이 되어 2번 문서, 3번 문서, 0번 문서, 1번 문서대로 출력이 될 것이다.
리턴은 내 문서가 몇 번째로 인쇄되는지를 리턴해줘야 하니 arr배열을 반복해 문서 번호가 location과 동일하다면 해당 문서번호에 1을 더해 리턴해준다 (문서번호를 인덱스로 했기 때문에 1을 더해줘야 첫 번째 순서, 두 번째 순서 등이 됨)
'코딩테스트' 카테고리의 다른 글
[JS] 2018 KAKAO BLIND RECRUITMENT[1차] > 뉴스 클러스터링 (0) | 2022.09.22 |
---|---|
[JS] 2019 카카오 개발자 겨울 인턴십 > 튜플 (0) | 2022.09.22 |
[JS] 스택/큐 > 기능개발 (0) | 2022.09.21 |
[JS] 해시 > 위장 (0) | 2022.09.21 |
[JS] 힙(Heap) > 이중우선순위큐 (0) | 2022.09.21 |
Comments