백준 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)
출력:
각 테스트케이스마다 궁금한 문서가 몇 번째로 인쇄되는지 출력
프린터는 일반적으로 인쇄 요청 순서대로(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))
해결 전략
- 중요도 리스트와 함께 문서 인덱스를 저장해서 현재 위치를 추적한다.
- 큐의 앞에 있는 문서가 가장 중요하다면 인쇄한다.
- 아니라면 맨 뒤로 보낸다.
- 인쇄된 문서가 우리가 추적하는 문서라면 순서를 출력하고 종료한다.