프린터

최진훈·2022년 3월 23일
0

programmers

목록 보기
57/73


이번 문제도 카테고리가 큐/스택 이기때문에 queuewhile문을 잘 이용해서 풀어봐야겠다.
먼저 같은 중요도의 작업들이 있을 수 있으므로 priorities의 원소들에 번호를 붙여서 로직을 돌리고 마지막에 location의 순서를 리턴해주면 될 것 같다. 문제는 대기목록에 중요도가 더 높은 작업의 유무를 판별하는 것 인데, 대기목록의 최대값을 구해서 한 사이클마다 비교해보면 될 듯 하다.

  1. priorities의 원소들에 인덱스를 넣어서 새로 저장해줄 Queue형태의 print를 선언한다.
  2. 출력이 된 작업들을 순서대로 저장할 complete를 선언한다.
  3. 반복문을 통해 Pair형태로 새롭게 print를 만든다.
  4. print가 다 비워질때까지 poll한 값을 start로, print를 내림차순으로 정렬한 것들중에 제일 큰 값을 max로 선언한다.
    5-1. startmax와 같지않으면 - 대기목록에 중요도가 더 높은 작업이 있는 것이기 때문에 현재의 값을 맨 뒤로 보내줘야 한다. print.add()이용
    5-2. startmax와 같으면 - 대기목록에 중요도가 더 높은 작업이 없는 것이기 때문에 그대로 출력.
  5. 모든 작업이 complete에 저장이되면 그중 location을 값으로 하는 인덱스+1을 answer에 더해준다.

레고레고

큐를 몇일 동안 사용해봐서인지 문제가 그나마 쉬워서인지 생각보다 빠르게 풀 수 있었다.
대기목록에 중요도가 더 높은 작업이 있으면 맨뒤로 보내는 부분을 어떻게 할지 몰라서 인터넷을 찾아봤었는데 그냥 add를 해주면 되는것이었다.... queue이기때문에 다른 함수들일거라고 생각해서인지 아예 떠오르지 않았었다.... 무튼 오늘도 하나 배웠다.

통과~!~!

profile
레고레고

0개의 댓글