백준(Python) 풀이/구현

백준(Python) 1966번 프린터 큐 풀이

개발윗미 2022. 7. 7. 16:27

Python으로 구현한 1966번 프린터 큐 문제 풀이입니다.

 

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

 

1966번: 프린터 큐

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

www.acmicpc.net


t = int(input())

for _ in range(t) :
    n, m = map(int, input().split())
    priority = list(map(int, input().split()))
    check = [0 for _ in range(n)]
    check[m] = 1

    count = 0
    while True :
        if priority[0] == max(priority) :
            count += 1
            if check[0] == 1 : # 찾을 값이면
                print(count)
                break
            else :
                priority.pop(0)
                check.pop(0)
        else :
            priority.append(priority.pop(0))
            check.append(check.pop(0))

 

1. 각 테스트 케이스마다 입력받은 n개의 0 값을 저장한 check 리스트를 생성하고, check[m] 을 1로 갱신한다.

 

2. 아래와 같은 작업을 반복 수행한다.

  - 만약 priority의 가장 첫 번째 요소가 최댓값과 같다면 count를 1증가시킨다.

  - 만약 check의 가장 첫 번째 요소가 1일 경우 찾을 값이므로 count를 출력한 후 break 한다.

  - check[0]이 1이 아닐 경우 priority의 가장 첫 번째 요소와 check의 가장 첫 번째 요소를 빼낸다.

 

  - 만약 priority[0]이 최댓값이 아닐 경우 priority의 가장 첫 번째 요소와 check의 가장 첫 번째 요소를 각각 빼내어 뒤로 넘겨 준다.