[DS] 1996번 - 프린터 큐(35일차)

bob.sort·2021년 6월 24일
0
post-thumbnail
#코드 실행 시간 단축
import sys
#popleft 사용
from collections import deque
input = sys.stdin.readline

#반복 횟수 입력
round = int(input())

for i in range(round):
    #문서 개수, 목표 문서 위치 입력
    n ,m = map(int, input().split())
    #문서 별 중요도 입력
    docu = deque(list(map(int, input().split())))
    #포인터에 목표 문서 위치 입력
    pointer = m
    #출력한 문서 수 세는 변수
    cnt = 0

    while True:
        #문서 중 최대 중요도 저장
        max_val = max(docu)
        #가장 앞에 있는 문서 popleft
        pop = docu.popleft()

        #문서 출력 불가
        if(pop != max_val):
            #pop한 문서를 맨 뒤로 보냄
            docu.append(pop)
            #목표 문서가 가장 앞에 있었을 때
            if(pointer == 0):
                #포인터에 남은 문서 중 가장 뒤의 위치 저장
                pointer = len(docu)-1
            #목표 문서가 아니었을 때
            else:
                #총 문서 개수가 줄어드므로 포인터 -1
                pointer -= 1
        #문서 출력 가능
        else:
            #출력한 문서 개수 +1
            cnt += 1
            #목표 문서가 가장 앞에 있었을 때
            if(pointer == 0):
                #출력한 문서 개수 출력
                print(cnt)
                #루프 탈출
                break
            #목표 문서가 아니었을 때
            else:
                #총 문서의 개수가 줄어드므로 포인터 -1
                pointer -= 1

#인사이트
#반복되는 코드는 위치를 조정해서 최소 횟수로 적을 수 있도록 디자인
#유동적인 자료구조에 대해서는 인덱스를 조심하자
profile
Interest in Computer Graphics and Computer Vision

0개의 댓글