[백준 파이썬] 1966 프린터 큐

RG-Im·2023년 4월 12일
1

알고리즘

목록 보기
2/28

백준 1966

import sys
from collections import deque
input = sys.stdin.readline

T = int(input())
for _ in range(T):
    N, target = map(int, input().split())
    importance = list(map(int, input().split()))

	# 몇 번째 인덱스였는지 확인하기 위해 인덱스를 함께 저장해준다.
    importance = deque([[i, imp] for i, imp in enumerate(importance)])
    
    count = 0
    while importance:
    	# 가장 중요도가 높은 문서의 중요도 저장
        max_imp = max(importance, key=lambda x: x[1])[1]
        # 큐의 첫 번째 값이 가장 중요도가 높다면
        if importance[0][1] == max_imp:
        	# 문서를 프린트 하고
            popped = importance.popleft()
            # 몇 번째인지 센다.
            count += 1
            # 출력하는 문서의 인덱스가 타겟과 일치한다면 순서 출력 후 반복문 종료
            if popped[0] == target:
                print(count)
                break
        else:
        	# 중요도가 낮다면 큐에서 빼낸 뒤 큐의 가장 뒤에 다시 추가한다.
            importance.append(importance.popleft())

처음에는 문제조차 이해를 못해서 문제를 계속 읽어봤다.

예제 입력 1:
3 <- 테스트 케이스 수
1 0 <- (큐에 대기중인 문서의 수, 몇 번째에 출력되는지 찾아야 할 문서의 인덱스 번호)
5 <- 문서들의 중요도

??

4 2 <- (큐에 대기중인 문서의 수, 몇 번째에 출력되는지 찾아야 할 문서의 인덱스 번호)
1 2 3 4 <- 문서들의 중요도
이 예제로 보면 큐의 2 번째 인덱스 (여기서는 1, 2, 3, 4)가 몇 번째로 출력되는지 찾아라는 얘기였다.

문제 이름에 대놓고 써져있지만 큐를 써서 풀면 된다.
중요도가 같은 문서가 있을 수도 있고, 목표 인덱스의 출력 순서를 물어보는 것이기 때문에 중요도인덱스를 큐에 저장해 문제를 해결했다.

profile
공부 저장용

0개의 댓글