[백준/Python] BOJ 1966 - 프린터 큐

NAGANG LEE·2023년 6월 6일

알고

목록 보기
4/118

👀 문제

1966번: 프린터 큐 ✨ 실버 3

현재 Queue의 가장 앞에 있는 문서의 ‘중요도’를 확인한다.
나머지 문서들 중 현재 문서보다 중요도가 높은 문서가 하나라도 있다면, 이 문서를 인쇄하지 않고 Queue의 가장 뒤에 재배치 한다. 그렇지 않다면 바로 인쇄를 한다.

예를 들어 Queue에 4개의 문서(A B C D)가 있고, 중요도가 2 1 4 3 라면 C를 인쇄하고, 다음으로 D를 인쇄하고 A, B를 인쇄하게 된다.

여러분이 할 일은, 현재 Queue에 있는 문서의 수와 중요도가 주어졌을 때, 어떤 한 문서가 몇 번째로 인쇄되는지 알아내는 것이다. 예를 들어 위의 예에서 C문서는 1번째로, A문서는 3번째로 인쇄되게 된다.


🔑 키포인트

현재 문서의 위치를 알 수 있는 배열 만들기

📍 배열의 위치를 나타내는 배열을 한 개 더 만들기.

✍️ 코드

cases = int(input())

for _ in range(cases):
    # 문서 개수, 어디 위치
    N, M = map(int, input().split())
    # 중요도
    scores = list(map(int, input().split()))
    # 궁금한 문서 위치
    where = list(range(len(scores)))
    where[M] = "me"

    # 몇 번째로 출력되는가
    count = 0

    while True:
        # 첫 번째가 우선순위 가장 높으면 count += 1
        if scores[0] == max(scores):
            count += 1
            # 그게 궁금한 문서라면 출력
            if where[0] == "me":
                print(count)
                break
            # 아니라면 pop해 주기
            else:
                scores.pop(0)
                where.pop(0)
        else:
            scores.append(scores.pop(0))
            where.append(where.pop(0))
profile
모바일 개발자를 목표로 하고 있어요 💭

0개의 댓글