[Baekjoon] 1966 - 프린터 큐 (Python)
문제
풀이
문제 이해 하는 데에만 엄청 오래걸렸다. input
과 output
이 헷갈려서 문제를 여러 번 봤다. 코드 작성하다가도 헷갈려서 계속 봤다 또 봤다.
Input
일단 input은
첫 번째 줄에는 testcase 수
두 번째 줄에는 문서 갯수 N
과 출력 순서가 궁금한 문서의 현재 위치 M
세 번째 줄은 N개의 각 문서의 중요도
이다.
M
을 이해하는데에 시간이 많이 걸렸다.
Output
M과 함께 Output도 뭔 말인지 잘 이해 안갔지만 직접 끄적여보면서
” index가 M인 문서는 몇 번째로 출력되는가? “ 로 정리가 된 다음 부터는 이해가 잘갔다.
최종 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import sys
from collections import deque
T = int(sys.stdin.readline().strip()) # testcase num
for i in range(T):
n, m = map(int, sys.stdin.readline().strip().split())
priority = deque(list(map(int, sys.stdin.readline().strip().split())))
cnt = 0
while priority:
if priority[0] == max(priority): # 맨 앞이 중요도 top 이라면
cnt += 1 # 출력되므로 cnt++
priority.popleft() # 제거
if m == 0:
break
else: # 중요도가 나중순위라면
priority.append(priority.popleft()) # 맨 뒤로
if m > 0:
m = m - 1
else:
m = len(priority) - 1
print(cnt)
m
은 input 값이고, 몇 번째로 출력되는지 알아야 할 문서의 현재 index이다.
priority
는 중요도로 popleft()를 사용하기 위해 deque()를 사용하였다.
- 우선,
priority
가 존재하는 동안 while문을 돈다.- 맨 앞의 중요도가 가장 높은 중요도라면 프린터에서 출력함과 동시에 출력순서 cnt를 1 더해준다.
- 이 때
m == 0
이라면 궁금한 문서라는 뜻이므로 break문으로 반복문을 탈출하고 print한다.- 맨 앞의 중요도가 나중 순위 중요도라면 맨 뒤로 물러난다.
- m이 0보다 크다면 m을 1씩 빼주고, 아니라면 제일 뒤로 이동한다.
Leave a comment