백준 1966번 프린트 큐

프린트 큐 문제 바로 가기


문제 설명

문제:
프린터는 일반적으로 인쇄 요청 순서대로(FIFO) 문서를 처리하지만, 새 소프트웨어는 중요도에 따라 다음과 같이 작동한다.

1. 현재 큐의 가장 앞 문서의 중요도를 확인한다.
2. 나머지 문서 중 현재 문서보다 더 높은 중요도를 가진 문서가 있다면, 현재 문서를 큐의 맨 뒤로 보낸다.
3. 그렇지 않다면 인쇄한다.

예시:
문서: A B C D
중요도: 2 1 4 3 → 출력 순서: C → D → A → B
→ C는 1번째, A는 3번째 인쇄됨

입력:
- 첫 줄: 테스트케이스 수 T
- 각 테스트케이스: - 1줄: 문서 수 N (1 ≤ N ≤ 100), 궁금한 문서 위치 M (0 ≤ M < N) - 2줄: 각 문서의 중요도 (1~9)

출력:
각 테스트케이스마다 궁금한 문서가 몇 번째로 인쇄되는지 출력

풀이 코드 (Python)


case = int(input())
for _ in range(case):
    N, M = map(int, input().split())
    value = list(map(int, input().split()))

    index = [i for i in range(N)]
    count = 0

    while True:
        if value[0] == max(value):
            count += 1
            if index[0] == M:
                print(count)
                break
            else:
                value.pop(0)
                index.pop(0)
        else:
            value.append(value.pop(0))
            index.append(index.pop(0))

해결 전략

  • 중요도 리스트와 함께 문서 인덱스를 저장해서 현재 위치를 추적한다.
  • 큐의 앞에 있는 문서가 가장 중요하다면 인쇄한다.
  • 아니라면 맨 뒤로 보낸다.
  • 인쇄된 문서가 우리가 추적하는 문서라면 순서를 출력하고 종료한다.