https://www.acmicpc.net/problem/1966
1966번: 프린터 큐
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에
www.acmicpc.net
자료구조 - 큐(queue)
파이썬에서 자료형 큐를 사용할때는 deque 로 사용하면 된다.
deque는 collections 라이브러리에 내장되어 있어 from collections import deque로 사용 가능하다.
-
queue는 '선'입 '선'출 형태 자료구조이고,
deque의 경우 양방향 큐로 선입,후입 어느쪽으로든 뺄 수 있다.
---
deque는 rotate(회전)이 가능한데
음수를 넣으면 왼쪽으로 회전 ( 맨 왼쪽 n개의 값을 가장 오른쪽으로 이동)
양수를 넣으면 오른쪽으로 회전 (맨 오른쪽 n개의 값을 가장 왼쪽으로 이동) 한다.
▷ deque.rotate(-2) : 왼쪽으로 2개 회전
ex) 1 2 3 4 5 6 → 3 4 5 6 1 2
deque.rotate(3) : 오른쪽 3개 회전
ex) 1 2 3 4 5 6 → 4 5 6 1 2 3
---
백준에 나와있는 예시는 rotate(1)로 해도 정답 출력값 이 나온다.
문제 풀 때 함수도 제대로 확인하고 풀자!
from collections import deque
t = int(input())
for _ in range(t):
n, m = map(int, input().split())
pop_num = []
queue = deque([i+1 for i in range(n)])
find_num = queue[m]
imp_q = deque(map(int, input().split()))
while True:
if len(imp_q) == 0 :
break
max_idx = imp_q.index(max(imp_q))
if max_idx != 0:
queue.rotate(-1)
imp_q.rotate(-1)
continue
elif max_idx == 0:
pop_num.append(queue.popleft())
imp_q.popleft()
continue
for num in pop_num :
if find_num == num :
print(pop_num.index(num) + 1)
'문제풀이 > 백준' 카테고리의 다른 글
[python/파이썬] 백준 1874 - 스택 수열 (실2) (0) | 2023.07.20 |
---|---|
[python/파이썬] 백준 4949 - 균형잡힌 세상 (실4) (1) | 2023.07.19 |
[JAVA/자바] 백준 15552 - 빠른 A+B(브4) (1) | 2023.04.30 |
[JAVA/자바] 백준 25314 - 코딩은 체육과목 입니다(브5) (0) | 2023.04.30 |
[python/파이썬] 백준 2775 - 부녀회장이 될테야(브1) (1) | 2023.01.29 |