algorithm/프로그래머스 문제
[프로그래머스 LV2]프린터
장경훈
2022. 7. 28. 10:51
| [LV2] 프린터 문제링크 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했 www.programmers.co.kr |


문제해설
이번 문제는 1번 조건을 보면 가장앞에 있는 문서를 뽑으라고 되어 있는데 이것을 보면 deque의 popleft를 떠올릴 수 있다. 시간복잡도 또한 O(1)이기 때문에 효율적인 방법이라고 생각이 되었고 각각의 중요도에 enumerate()를 사용하여 순번을 매겨주고 최대값과 비교하면서 반복문을 돌려주면 쉽게 풀 수 있다.
from collections import deque
def solution(priorities, location):
answer = 0
prior=deque() # deque 생성
for i,pri in enumerate(priorities):
prior.append((pri,i)) #순번과 중요도를 deque 담는다
while True:
maxprior=max(prior) # 현재 중요도의 최대값을 구한다
pri,loc=prior.popleft() # 1번조건인 가장 앞에 있는 문서의 중요도와 순번을 뽑는다
if pri ==maxprior[0]: # 만약 중요도가 최대값이면
answer+=1 #출력한 횟수 +1
if loc ==location: #동시에 내가 원하던 문서라면 반복문 종료
break
else:
prior.append((pri,loc))
return answer #출력된 문서의 수 반환

Key point
- deque의 popleft의 기능을 알고 있어야한다
- enumerate을 사용하여 리스트 요소 각각에 순번을 부여하는 방법을 알아야 한다