IT/Programmers
[프로그래머스/Javascript/Queue] 프린터
파티에
2021. 4. 7. 21:34
1. 문제설명(출처: programmers.co.kr/learn/courses/30/lessons/42587)
2. 문제풀이
1) 문제에서 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 알고 싶습니다. 라고 했으니, 해당 문서의 위치(location)에 표시를 하기 위해 [[1번 문서의 중요도, 요청한 문서 여부], [2번 문서의 중요도, 요청한 문서 여부], ... , [n번 문서의 중요도, 요청한 문서 여부]] 와 같은 형식의 q라는 queue를 만든다.
2) 몇번 인쇄가 됐는지 확인하기 위한 변수 cnt를 생성한다.
3) 아래 명령을 반복한다.
3-1) q 에서 맨 앞의 요소를 꺼내 cur에 저장한다.
3-2) 현재 q안에 cur보다 중요도가 높은 문서가 있는지 확인한다.
3-2-t) 만약 있다면
3-2-t-1) cur은 나중에 인쇄하기 위해 다시 q에 집어넣는다.
3-2-f) 만약 없다면
3-2-f-1) 현재 문서를 인쇄하고 cnt를 1늘려준다.
3-2-f-2) 인쇄한 문서가 요청한 문서인지 확인한다.
3-2-f-2-t) 만약 현재 문서가 요청한 문서라면
3-2-f-2-t-1) 지금까지 몇개의 문서가 인쇄됬는지를 저장하고 있는 cnt를 반환한다.
3. 결과코드
function solution(priorities, location) {
var q = priorities.map((t,i)=>([ t, i === location ]));
var cnt = 0;
while(true){
var cur = q.shift();
if(q.some(t => t[0] > cur[0])){
q.push(cur);
}else{
cnt++;
if(cur[1])
return cnt;
}
}
}