개발 블로그

[프로그래머스/Javascript/Queue] 프린터 본문

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;
      }
  }
}