BOJ/Python
백준 1966번 프린터 큐 파이썬
띵지니어
2024. 3. 8. 01:44
반응형
https://www.acmicpc.net/problem/1966
내 답안
from collections import deque
N = int(input())
for i in range(N):
N, M = map(int, input().split())
priority = deque(list(map(int, input().split())))
ind = deque([i for i in range(N)])
cnt = 0
while priority:
m = max(priority)
if priority[0] < m:
priority.append(priority.popleft())
ind.append(ind.popleft())
elif priority[0] == m:
priority.popleft()
cnt += 1
if ind.popleft() == M:
print(cnt)
break
Review
코드의 논리를 보면 다음과 같습니다.
1. 가장 큰 priority 정하기
2. 가장 큰 priority 와 현재 맨 앞에 있는 원소 비교
2-1. 맨 앞에 있는 원소 < 가장 큰 priority 원소 이면
해당 priority 원소와 인덱스 원소를 맨 뒤로 보내기
2-2. 맨 앞에 있는 원소 == 가장 큰 priority 원소 이면
출력 수(cnt) += 1
해당 원소 제거, 해당 인덱스가 궁금한 인덱스 인지 비교
2-2-1. 해당 인덱스 == 궁금한 인덱스 이면
index 출력하고
반복문 종료
해당 입력일 때의 로직을 그림으로 그려서 설명해 보겠습니다.
주어진 priority 와 ind 를 튜플 형태로 묶어서도 해결할 수 있는 문제지만
저는 따로 그림 처럼 나눠서 해결을 해보았습니다.
반응형