BOJ / Implementation / 프린터 큐 / Python

k_dah·2022년 1월 21일
0

CodingTest

목록 보기
12/16

<1966번>

문제 풀이

n개 문서의 중요도를 저장할 리스트(files)와 몇 번째로 인쇄되는지 궁금한 문서의 위치를 표시한 리스트(check), 총 2개의 리스트가 필요하다.
files과 그때의 리스트의 최댓값(max(files)을 비교해 나간다.
비교 결과에 따라 문서를 출력, 즉 files.pop()을 하여 리스트에서 해당 값을 빼내거나
리스트의 가장 뒤로 값을 옮기게 되는데 files.append(files.pop())
위와 같은 작업을 check에도 똑같이 수행한다.
이를 통해 files 내에서 문서들의 위치가 계속 변경이 되더라도 내가 표시해둔 문서의 위치 정보를 계속 유지할 수 있다.

코드

import sys
input = sys.stdin.readline

cases = int(input())

for _ in range(cases):
    n, idx = map(int, input().split())
    files = list(map(int, input().split()))
    check = [0 for _ in range(n)]
    check[idx] = 1
    
    count = 0
    while files:
        if max(files) == files[0]:
            files.pop(0)
            count += 1
            if check.pop(0):
                print(count)
                break
        else:
            files.append(files.pop(0))
            check.append(check.pop(0))

📝 문제 풀면서

문제 제대로 읽기

profile
개똥이

0개의 댓글