개발 연습장/백준 문제풀이

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

LooanCheong 2023. 3. 15. 10:21
반응형

문제

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

 

1966번: 프린터 큐

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

www.acmicpc.net

코드

import sys
input = sys.stdin.readline

t = int(input())

for _ in range(t):
    cnt = 0
    n,m = map(int,input().split())
    paper = list(map(int,input().split()))
    idx = [i for i in range(len(paper))]
    target = idx[m]

    while len(paper) > 0:
        if paper[0] == max(paper):
            if idx[0] == target:
                cnt += 1
                break
            else:
                paper.pop(0)
                idx.pop(0)
                cnt += 1
        else:
            paper.append(paper.pop(0))
            idx.append(idx.pop(0))
    print(cnt)

설명

우선 각 조건에 맞게 수를 입력해 준다.

그리고 각 paper의 인덱스를 idx라는 리스트로 생성해 주고,
target을 입력된 문서의 인덱스로 지정해 준다.

paper가 남아있는 동안 반복문을 진행한다.
이때, paper[0]의 수가 paper에서 가장 크지 않다면,
첫 장을 뒤로 보내고, 인덱스도 맞춰서 수정해 준다.

만약 paper[0]이 가장 큰 수이면서, 타깃이라면
카운트를 하나 늘리고 반복문을 종료한다.

그렇지 않다면, paper와 idx를 하나씩 줄여주고 cnt를 하나 늘린 후 다시 진행한다.

이후 카운트 된 횟수를 출력한다.

반응형