문제 :
프린터의 중요도가 적힌 리스트가 주어지고 원하는 프린트 하고자 하는 파일의 인덱스가 주어졌을 때
몇 번째로 프린터 되는지 출력하는 문제.
나의 풀이 :
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일 때이다.
'Algorithms과 자료구조 > 이분탐색, 분할정복, 스택, 큐, 우선순위큐' 카테고리의 다른 글
파이썬 백준 1933스카이라인_bisect (0) | 2021.11.18 |
---|---|
이분탐색 (이진탐색)_백준 사냥꾼 (0) | 2021.11.17 |
분할정복_백준 2630 색종이_파이썬 (0) | 2021.11.17 |
우선순위 큐(힙) 백준 13334 철로 파이썬 (0) | 2021.11.17 |
모듈러 연산 (0) | 2021.11.15 |