Programming/코딩테스트
[백준] 1966번 프린터 큐 - 파이썬
brad.min
2024. 2. 18. 17:06
반응형
1966번: 프린터 큐
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에
www.acmicpc.net
문제 접근 방법
일반적인 구현 문제로 큐의 순서를 바꾸더라도 처음의 인덱스 값을 기억해야하는 것이 주요한 점 같다. 처음 상태의 인덱스를 기억하는 방법으로는 딕셔너리, 튜플 등 다양한 자료 구조 방법을 사용할 수 있지만 나는 튜플을 사용했다.
제출코드
from collections import deque
T = int(input())
for _ in range(T):
N, M = map(int, input().split())
print_pool = deque([(i, int(p)) for i, p in enumerate(input().split())])
answer = 0
while True:
# 현재 상태에서 가장 큰 수를 찾는다.
max_ = max(print_pool, key=lambda x: x[1])
# 가장 큰수와 큐의 맨 앞에 있는 수를 비교해서 다르면 순서를 바꾼다.
if max_[1] != print_pool[0][1]:
print_pool.append(print_pool.popleft())
# 가장 큰수와 큐의 맨 앞에 있는 수가 같다면 찾으려는 인덱스의 값인지 확인한다.
elif max_[1] == print_pool[0][1]:
# 찾으려는 인덱스이면 answer+=1 하고 while를 break
if max_[0] == M:
print_pool.popleft()
answer +=1
break
# 그렇지 않으면 큐의 맨앞의 값을 pop한다.
else:
print_pool.popleft()
answer += 1
print(answer)
반응형