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을 사용하여 리스트 요소 각각에 순번을 부여하는 방법을 알아야 한다