[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을 사용하여 리스트 요소 각각에 순번을 부여하는 방법을 알아야 한다
'algorithm > 프로그래머스 문제' 카테고리의 다른 글
[프로그래머스LV2] 거리두기 확인하기 (0) | 2022.08.05 |
---|---|
[프로그래머스LV2] 게임 맵 최단거리 (0) | 2022.08.01 |
[프로그래머스 LV2] 뉴스 클러스터링 (0) | 2022.07.19 |
[프로그래머스 LV2]행렬 테두리 회전하기 (0) | 2022.07.18 |
[프로그래머스LV2]메뉴 리뉴얼 (0) | 2022.07.15 |