
❓ 문제
백준 실버 3 문제 > 프린터 큐
❗ 해결
큐를 사용해서 풀면 된다.
먼저 문서의 index와 해당 문서의 중요도를 리스트 형태로 저장한다.
입력이
6 0
1 1 9 1 1 1
일때,
[[0 , 1], [1, 1], [2, 9], [3, 1], [4, 1], [5, 1]]
이렇게 만들어주도록 한다.
count, target = map(int,input().split())
temp = list(map(int,input().split()))
documents = deque()
for i, v in enumerate(temp):
documents.append([i,v])
그러면 documents라는 리스트는 위의 리스트와 같은 형태를 나타낸다.
rank = 0
while documents:
flag = False
temp = documents.popleft()
for doc in documents:
if temp[1] < doc[1]:
flag = True
break
if flag:
documents.append(temp)
else:
rank += 1
if temp[0] == target:
print(rank)
break
그 후 몇 번째로 출력되는지를 나타내는 rank 변수를 0으로 초기화 시켜준다.
그리고 documents가 빌 때 까지 (모든 문서가 인쇄될 때 까지) while문을 돌리면서 문서 맨 앞부터 popleft()를 해서, 리스트를 순회하면서 중요도가 높은 문서가 있는 경우 flag 값을 True로 변경해주고, 마지막에 flag값이 True인 경우에는 중요도가 있는 문서가 존재하기 때문에 해당 popleft() 한 문서를 맨 뒤로 보낸다.
만약 flag가 False인 경우 해당 문서가 가장 중요한 문서이므로 출력한다.
출력할 때 출력한 순서를 나타내는 rank값을 1씩증가시키면서, 찾는 문서가 나온 경우 rank값을 출력시켜주고 반복문을 빠져나온다.
전체코드
from collections import deque
case = int(input())
for _ in range(case):
count, target = map(int,input().split())
temp = list(map(int,input().split()))
documents = deque()
for i, v in enumerate(temp):
documents.append([i,v])
rank = 0
while documents:
flag = False
temp = documents.popleft()
for doc in documents:
if temp[1] < doc[1]:
flag = True
break
if flag:
documents.append(temp)
else:
rank += 1
if temp[0] == target:
print(rank)
break
