짱이 될거야
백준 1966: 프린터 큐 Python 본문


https://www.acmicpc.net/problem/1966
1966번: 프린터 큐
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에
www.acmicpc.net
N(1 ≤ N ≤ 100), M(0 ≤ M < N)으로 입력이 크진 않지만 pop()을 써야 하기 때문에 deque를 활용해야 한다.
중요도가 같은 문서가 여러 개 있을 수도 있기 때문에, 중요도 입력 리스트에다가 인덱스를 함께 달아줬다.
(lst[i], i)와 같이 튜플 형태로 deque에 넣었다.
문제 해결 방식은 다음과 같다.
- 인쇄되는 순서는 변수 cnt로 설정하고, 초기값을 0으로 둔다.
- 먼저 lst[i], 즉 중요도를 기준으로 max 값을 찾는다.
- queue의 맨 첫 번째 값의 중요도가 max 값 이상이면 큐에서 빼내야 하는데, 맨 첫 번째 값의 인덱스가 찾고 싶은 문서의 인덱스(=M)와 일치하면 cnt += 1을 해주고 반복문을 끝낸다.
- 중요도가 max 값 이상인데 인덱스가 M과 일치하지 않으면 그 값을 빼내기고 cnt += 1을 한 채로 반복문을 계속한다.
- 만약 중요도가 max 값 미만이라면 빼서 queue 뒤에 다시 넣는다.
- queue 안에 있는 값 하나하나를 처리할 때마다 최대 가중치 값을 다시 계산해줘야 한다.
from collections import deque
T = int(input())
for tc in range(T):
N, M = map(int, input().split()) # N: 문서의 개수, M: 순서 찾을 문서
lst = list(map(int, input().split()))
q = deque()
for i in range(N):
q.append((lst[i], i))
cnt = 0
max_value = max(q, key=lambda x: x[0])
while True:
if q[0][0] >= max_value[0] and q[0][1] == M:
cnt += 1
break
elif q[0][0] >= max_value[0]:
q.popleft()
cnt += 1
else:
q.append(q.popleft())
max_value = max(q, key=lambda x: x[0])
print(cnt)
'알고리즘' 카테고리의 다른 글
프로그래머스 SQL: SELECT (0) | 2022.09.30 |
---|---|
백준 4485: 녹색 옷 입은 애가 젤다지? Python (Dijkstra) (0) | 2022.09.27 |
백준 11650: 좌표 정렬하기 Python (0) | 2022.09.16 |
백준 1018: 체스판 다시 칠하기 Python (Brute Force) (0) | 2022.09.15 |
백준 22864: 피로도 Python (0) | 2022.09.13 |
Comments