728x90

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

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

출처 : 프로그래머스


from collections import deque
def solution(priorities, location):
    answer = 0
    q = deque([v,i] for i,v in enumerate(priorities))
    print(q)
    while q:
        tmp = q.popleft()
        # q가 남아 있어야 max 값이 있음.
        if q and tmp[0] < max(q)[0]: # 중요도가 높은 문서가 있다면
            q.append(tmp)
        else:
            # 문서 인쇄
            answer += 1
            if tmp[1] == location: # 인쇄한 문서의 초기 인덱스가 요청한 문서면 끝
                break
    return answer

풀이

문서의 인덱스와 우선순위(값)를 같이 관리해줘야 하기 때문에 enumerate을 사용해서 풀이하면 유용하다.

또한, 처음 원소를 빼고 마지막에 더하고 이러한 연산을 반복하니 deque 를 사용했다.

처음 문서를 빼서 이 문서의 우선순위보다 큰 값이 큐에 있으면 맨 뒤에 제거하는 것은

큐의 max 값과 비교했다. 

이 떄, 큐에서 처음 문서를 뺐을 때, 큐가 비면 max 값 작동이 되지 않는다.

주의하자~~~~~~~~~

 

인쇄한 문서의 인덱스가 요청한 문서의 인덱스와 같다면 break를 통해 while 문을 빠져나온다.

+ Recent posts