Rego의 블로그

백준 1966 파이썬 프린터 큐 본문

BEAKJOON

백준 1966 파이썬 프린터 큐

RegularPark 2021. 9. 28. 21:57

https://www.acmicpc.net/problem/1966

 

1966번: 프린터 큐

여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에

www.acmicpc.net

 

문제 이해하는 데 정말 오랜 시간을 소요했다... 결국 수많은 시행착오 끝에 구글의 힘을 빌어 해결했지만, 이해한 대로 적어보자면,

 

1. 중요도 리스트와 중요도 리스트의 길이를 요소로 하는 인덱스 리스트를 작성한다.

 

2. m은 찾고자 하는 문서의 리스트 내 위치로, 중요도 리스트의 길이를 요소로 한 index[]를 만들고 index[m] = 'x'를 이용해 리스트에 x를 심어놓는다.

 

3. while 문을 이용해 중요도 리스트의 첫 번째 요소가 리스트 내에서 큰 값일 때만 cnt를 늘리고, 첫 번째 요소가 가장 크지 않다면, pop() 하여 append()하는 것을 반복한다.

 

4. 3번 작업을 반복하다보면 imp[0]이 가장 큰 차례가 온다. 그 때 if 문 내부의 index[0]을 묻는 if 문을 실행하고

index[0] ==  'x'를 만족하지 않는다면 imp[0]와 index[0]을 pop()하여 가장 큰 값을 없앤다.

 

5. if 문을 만족시켜 cnt를 출력하고 break를 실행하여 마친다.

 

t = int(input())
for i in range(t):
    n, m = map(int, input().split())
    imp = list(map(int, input().split()))
    index = list(range(len(imp)))
    index[m] = 'x'

    cnt = 0
    while True:
        if imp[0] == max(imp):
            cnt += 1

            if index[0] == 'x':
                print(cnt)
                break
            else:
                imp.pop(0)
                index.pop(0)
        else:
            imp.append(imp.pop(0))
            index.append(index.pop(0))