티스토리 뷰

알고리즘/프로그래머스

프린터

이지홍 2023. 2. 17. 14:50
반응형

프로그래머스의 "프린터" 문제는 주어진 프린터 대기열에서 현재 대기열에서 가장 앞에 있는 문서를 꺼내어 출력하는 작업을 반복하면서, 출력될 문서가 원하는 문서인 경우 출력을 멈추고 출력까지 걸린 시간을 반환하는 문제입니다.

function solution(priorities, location) {
  let answer = 0;
  let queue = priorities.map((priority, index) => ({ priority, index })); // 각 문서마다 우선순위와 인덱스 정보를 객체로 만들어 큐에 넣음
  
  while (queue.length > 0) { // 큐가 빌 때까지 반복
    let first = queue.shift(); // 가장 앞에 있는 문서를 큐에서 꺼냄
    if (queue.some((doc) => doc.priority > first.priority)) { // 큐에 우선순위가 더 높은 문서가 있다면
      queue.push(first); // 가장 앞에 꺼낸 문서를 큐의 가장 뒤에 넣음
    } else { // 우선순위가 가장 높은 문서라면
      answer++; // 출력될 문서의 개수를 1 증가시킴
      if (first.index === location) { // 출력될 문서가 원하는 문서라면
        break; // 출력까지 걸린 시간을 반환하기 위해 반복문을 빠져나감
      }
    }
  }
  
  return answer;
}

위 코드에서는 priorities 배열에서 각 문서의 우선순위와 인덱스 정보를 담은 객체를 만들어 queue 배열에 넣습니다. 이후 queue 배열이 빌 때까지 반복하면서, 가장 앞에 있는 문서를 큐에서 꺼내어 우선순위가 더 높은 문서가 큐에 있는지 확인하고, 있다면 큐의 가장 뒤에 다시 넣어줍니다. 그렇지 않은 경우에는 출력될 문서의 개수를 1 증가시키고, 출력될 문서가 원하는 문서인 경우에는 반복문을 빠져나가 출력까지 걸린 시간을 반환합니다.

반응형

'알고리즘 > 프로그래머스' 카테고리의 다른 글

네트워크  (0) 2023.09.10
타겟 넘버  (2) 2023.09.09
숫자의 표현  (0) 2023.09.08
N으로 표현  (0) 2023.03.08
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함