BOJ(백준) 1966번 프린터큐 파이썬
2021. 3. 19. 14:53ㆍ개인 공부 공간/Algorithm
1966번: 프린터 큐
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에
www.acmicpc.net
코드
from collections import deque
import sys
r = sys.stdin.readline
T = int(r())
for _ in range(T):
N,M = map(int,r().split())
que = deque(list(map(int,input().split())))
cnt1 = 0
while que[M] != max(que):
if que[0] == max(que):
que.popleft()
cnt1 += 1
if M != 0:
M -= 1
else:
M = len(que) - 1
else:
que.append(que.popleft())
if M != 0:
M -= 1
else:
M = len(que) - 1
cnt2 = 1
for i in range(len(que)):
if que[i] == que[M] and i < M:
cnt2 += 1
print(cnt1+cnt2)
해설
while
문을 이용하여 몇번째로 인쇄되었는지 궁금한 문서의 중요도가 que
에서 제일 큰 값이될 때 까지 가장 앞에 있는 문서의 중요도가 가장 클 경우 popleft()
를 해서 출력하거나 그렇지 않을 경우 append(que.popleft())
를 이용해 맨 뒤로 보내주었다. 동시에 그 문서의 index인 M
을 상황에 맞게 변화시켜 주었다. 그렇게 하여 그 문서의 중요도가 que
내에서 커질때까지 cnt1
의 값을 하나씩 증가시켰다. 그 후 문서의 중요도가 동점인 경우를 고려하기 위해 cnt2
를 이용하였다.
결과
'개인 공부 공간 > Algorithm' 카테고리의 다른 글
BOJ(백준) 5430번 AC 파이썬 (0) | 2021.03.19 |
---|---|
BOJ(백준) 1021번 회전하는 큐 파이썬 (0) | 2021.03.19 |
BOJ(백준) 1874번 스택 수열 파이썬 (0) | 2021.03.19 |
BOJ(백준) 9012번 괄호 파이썬 (0) | 2021.03.19 |
BOJ(백준) 10828번 스택 파이썬 (0) | 2021.03.19 |