문제 링크 : https://www.acmicpc.net/problem/1966
풀이
큐와 이차 배열을 사용하여 문제 풀이를 진행했다.
중요도와 문서 번호를 동시에 큐에 담아서 진행하는 것이 풀이의 핵심이라고 볼 수 있겠다.
이차 배열이 아니라 딕셔너리를 사용하여서 풀이하는 것도 가능할거 같다.
import sys
from collections import deque
for _ in range(int(sys.stdin.readline())):
n, m = map(int, sys.stdin.readline().split())
que = deque()
priority = sys.stdin.readline().strip().split() # 우선순위 저장
for i in range(n):
que.append([i, int(priority[i])]) # 문서 순서와 중요도를 한번에 저장
if n == 1:
print(1)
else:
cnt = 0 # 몇 번째로 출력되었는지 카운트
while True: # 몇 번째로 인쇄되었는지 궁금한 문서가 인쇄될 때까지 반복
clumn = [i[1] for i in que] # 중요도 열만 뽑아내기
max_num = max(clumn) # queue에 존재하는 문서들의 중요도 중 최대값
if que[0][1] == max_num: # 맨 앞의 문서 중요도가 queue에 존재하는 문서들 중 가장 크다면 출력
cnt += 1 # 출력 카운트 증가
if que[0][0] == m: # 이 문서가 출력 순서를 알고 싶었던 문서라면
break # while문 break
que.popleft() # 출력 완료
else: # 더 중요도가 큰 문서가 있다면
que.append(que[0]) # queue의 맨 뒤로
que.popleft() # 이동
print(cnt)
'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글
(C++) 백준 1406번 - 에디터 (0) | 2023.03.16 |
---|---|
(C++) 백준 5397번 - 키로거 (0) | 2023.03.16 |
(Python) 백준 1929번 - 소수 구하기 (0) | 2023.01.11 |
(Python) 백준 1874번 - 스택 수열 (0) | 2023.01.10 |
(Python) 백준 10866번 - 덱 (0) | 2023.01.10 |