티스토리 뷰
1966번: 프린터 큐
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에
www.acmicpc.net
1. 문제 내용
2. 접근 방식
- 문제에 언급된 조건을 그대로 구현하자.
현재 문서는 0번째이고, 이것보다 중요도가 높은 문서가 있는지 확인하기 위해 max( ) 내장함수를 사용하여 값을 비교한다. 만약 0번째보다 더 큰 중요도를 가진 문서가 있다면, 0번째 문서를 pop( )하고 큐의 맨 뒤에 추가한다.
- 실행 순서를 카운팅하기 위해 타겟 문서의 인덱스 m을 추적하자.
현재 문서보다 중요도가 높은 문서가 있어서 큐의 맨 뒤로 이동하든, 현재 문서가 프린트되든 타겟 문서의 인덱스 m은 1이 감소한다. 이때 만약 m == 0이지만, 이것보다 중요도가 더 높은 문서가 있다면 맨 뒤로 이동해야 하므로 m == len(큐) - 1이 된다. 반면 m == 0이고, 이것의 중요도가 가장 높다면 해당 문서가 출력된다.
3. 정답 코드
t = int(input())
for _ in range(t):
n, m = map(int, input().split())
data = list(map(int, input().split()))
result = 1
while data:
if data[0] < max(data):
data.append(data.pop(0))
else:
if m == 0: break
data.pop(0)
result += 1
m = m - 1 if m > 0 else len(data) - 1
print(result)
O(1)이 소요되는 popleft()를 사용하기 위해 deque 모듈을 사용한 코드도 제출해 보았지만, 데이터 양이 많지 않아서 그런지 오히려 실행 속도가 더 느려졌다. 중간 원소에 접근하는 데 상대적으로 느리기 때문일까?
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준] 2477번 참외밭 파이썬 정답 코드 (0) | 2023.06.11 |
---|---|
[백준] 2108번 통계학 파이썬 정답 코드 (0) | 2023.06.10 |
[백준] 1213번 팰린드롬 만들기 파이썬 정답 코드 (3) | 2023.06.09 |
[백준] 17521번 Byte Coin 파이썬 정답 코드 (0) | 2023.06.07 |
[백준] 1246번 온라인 판매 파이썬 정답 코드 (0) | 2023.06.06 |