728x90
반응형
https://www.acmicpc.net/problem/1966
1966번: 프린터 큐
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에
www.acmicpc.net
code
#프린터 큐
from collections import deque
t = int(input())
for _ in range(t):
n, m = map(int,input().split())
imp = deque(map(int, input().split()))
idx = deque(range(n))
idx[m] = 'target'
order = 0
while True:
if imp[0] == max(imp):
order += 1
if idx[0] == 'target':
print(order)
break
else:
imp.popleft()
idx.popleft()
else:
imp.append(imp.popleft())
idx.append(idx.popleft())
이번문제는 중요도에 따라 출력하는데 FIFO - First In First Out 방식으로 내려주는 방법이 필요하다.
입력
1. t = 케이스 갯수
2. n, m = 문서의 개수, 알아내고자 하는 타겟
3. imp = 중요도
위와 같이 입력을 받고 idx라는 deque를 만들었다.
리스트를 사용하지 않은 이유는 fifo방식을 사용하기 위해 맨 앞에 문서를 맨뒤로 보내야 하기 때문이다.
idx에 입력 받은 문서의 갯수만큼의 값을 넣어준다.
idx에 타겟의 값을 target으로 설정한다.
idx = deque(range(n))
idx[m] = 'target'
while 문
중요도(imp)의 첫번째 값과 중요도(imp)내의 최대 값과 비교한다.
만약 같다면 결과 값인 order에 1을 추가한다.
만약 문서데큐(idx)의 첫번째 값이 target이라면 몇번째로 인쇄 되었는지 알수있는 order값을 출력하고 나온다.
아니라면 중요도(imp)와 문서데큐(idx)의 첫번째(중요도 최대)를 삭제(인쇄)한다.
중요도(imp)의 첫번째 값이 중요도(imp)내 쵀대 값이 아니라면
imp와 idx값의 첫번재를 맨 뒤로 보내준다.(fifo방식으로 출력하기 위함)
while True:
if imp[0] == max(imp):
order += 1
if idx[0] == 'target':
print(order)
break
else:
imp.popleft()
idx.popleft()
else:
imp.append(imp.popleft())
idx.append(idx.popleft())
728x90
반응형
'알고리즘 > 백준[baekjoon]' 카테고리의 다른 글
[baekjoon] 백준 2805번 : 나무 자르기 (by python 파이썬) (0) | 2022.04.05 |
---|---|
[baekjoon] 백준 1874번 : 스택 수열 (by python 파이썬) (0) | 2022.04.05 |
[baekjoon]백준 1654번 : 랜선 자르기 (by python 파이썬) 이분탐색 (0) | 2022.03.30 |
[baekjoon]백준 11866번 : 요세푸스 문제 0 (by python 파이썬) (0) | 2022.03.28 |
[baekjoon] 백준 10866번 : 덱 (deque) (0) | 2022.03.27 |