본문 바로가기
Algorithms과 자료구조/이분탐색, 분할정복, 스택, 큐, 우선순위큐

프로그래머스_42587 프린터_파이썬풀이(스택,큐)

by Success T.H.I.E.F 2021. 12. 15.

문제 : 

프린터의 중요도가 적힌 리스트가 주어지고 원하는 프린트 하고자 하는 파일의 인덱스가 주어졌을 때

몇 번째로 프린터 되는지 출력하는 문제.

 

나의 풀이 :

 

from collections import deque

def solution(priorities, location):
    answer = 0
    priorities = deque(priorities) #popleft를 쓰기위해 deque로 형변환

    while True:
        maxpr = max(priorities)
        a=priorities.popleft()

        if a==maxpr: #왼쪽부터 순서대로 뽑은 값이 max라면?
            if location == 0:
                answer+=1
                break
            else :
                answer+=1
                location-=1
                
        else :
            location-=1
            priorities.append(a)
            if location<0:
                location = len(priorities)-1
            

    return answer

중요도 리스트가 적힌 출력물을 앞에서부터 뽑아 비교해 보기 위해 deque로 형 변환하여 popleft함수를 사용하였다.

중요도 리스트에서 뽑아낸 값이 중요도 리스트의 max값과 일치할 경우 해당 출력물을 리스트에서 제거하며 출력되었으므로 answer을 1 증가시킨다.

이때 해당 출력물의 location이 내가 원하는 location의 값이 아닌 경우 내가 원하는 출력물의 location을 1 앞당긴다.

 

만약 popleft 한 값이 max보다 작다면? 해당 출력물은 리스트의 맨뒤로 이동시키고 내가 원하는 출력물의 location을 1 앞 당겨 준다.

 

내가 원하는 출력물이 출력될 때는 location이 0이 되며 중요도는 max일 때이다.