728x90
https://www.acmicpc.net/problem/1966
# 조건
- 문서의 우선 순위에 따라 인쇄를 진행한다.
- 우선 순위는 동일할 수 있다.
- 우선 순위가 가장 높은 경우가 인쇄 차례일 때만 인쇄를 진행한다.
- 이 때 몇 번째로 인쇄되는지 궁금한 문서의 인덱스가 주어질 때
- 몇 번째 인쇄되는지 구하여라.
# 접근 방법
- 문제에 나와있듯이 deque를 이용하여 앞에서의 출력, 뒤로 입력을 해주었다.
- 이 때, 처음 궁금했던 문서였음을 알리기 위하여 인덱스를 저장해주고, 문서의 위치에 따라 변경해주었다.
- 0번 인덱스에 있지만, 최상위 우선순위가 아닌 경우 제일 뒤로가는데
- 이 때, 내가 활용하고 있는 q 리스트의 길이-1로 넣어주면 된다.
import sys
from collections import deque
sys.stdin = open('input.txt')
def docu(M):
# deque 활용
q = deque(priority)
# 문서 출력 횟수
cnt = 0
# 궁금한 문서 인덱스
m = M
while q:
# 첫 문서의 중요도가 가장 높다면
if q[0] == max(q):
# 내가 뽑고자 하는 인덱스가 제일 앞에 있다면 return
if m == 0:
return cnt + 1
# 그게 아니라면
# 인쇄하고 카운트
q.popleft()
cnt += 1
# 인덱스가 0이라면 제일 뒤의 인덱스로 옮겨주고
if m == 0:
m = len(q) - 1
# 그게아니라면 -1
else:
m -= 1
else:
# 우선순위가 최상위가 아니라면 뽑고 추가 해준다.
q.append(q.popleft())
# 인덱스가 0이라면 제일 뒤의 인덱스로 옮겨주고
if m == 0:
m = len(q)-1
# 그게아니라면 -1
else:
m -= 1
return cnt
T = int(input())
for tc in range(T):
N, M = map(int, input().split())
priority = list(map(int, input().split()))
print(docu(M))
728x90
'ALGORITHM > 자료구조' 카테고리의 다른 글
[백준 7662번] 파이썬 - 이중 우선순위 큐 (0) | 2022.10.09 |
---|---|
[백준 1764번] 파이썬 - 듣보잡 (0) | 2022.10.05 |
[백준 11866] 파이썬 - 요세푸스 문제 0 (0) | 2022.09.15 |
[백준 9012번] 파이썬 - 괄호 (1) | 2022.09.13 |
[백준 1920] 파이썬 - 수 찾기 (0) | 2022.09.09 |