[Python] 스택/큐(2) 프린터

Updated: Categories:

https://programmers.co.kr/learn/courses/30/lessons/42587

아이디어

  1. 프린터의 우선순위만 담은 리스트만 주어지므로 리스트의 순서가 바뀌면 인덱스의 정보가 사라집니다
  2. 따라서 인덱스와 우선순위를 그룹핑한 큐 p_list를 생성합니다.
  3. 그리고 priorities를 참조할 우선순위 큐로 바꿉니다.
  4. 이제 p_list 큐의 맨 앞 값(temp)을 계속 검사합니다.
  5. temp의 우선순위를 priorities 큐의 맨 앞 값과 비교합니다.
  6. priorities 큐의 맨 앞 값과 우선순위가 같다면 temp의 우선순위가 가장 큽니다.
  7. 만약 다르다면 가장 큰게 아니므로 temp를 큐의 뒤로 보냅니다
  8. 같다면 temp의 인덱스가 location일 때 cnt를 리턴합니다.

정답 코드

from collections import deque

def solution(priorities, location):
    p_list = deque([[i,p] for i, p in enumerate(priorities)])
    priorities = deque(sorted(priorities, reverse=True))
    cnt = 0
    while 1:
        temp = p_list.popleft()
        if priorities[0] != temp[1]:
            p_list.append(temp)
        else:
            cnt+=1
            priorities.popleft()
            if temp[0] == location:
                break
    return cnt