문제
https://www.acmicpc.net/problem/1158
문제 설명
- 리스트에서 순서대로
pop
하기 때문에, Queue
자료형을 써야할 것이라 생각했으나. python에서 제공하는 Queue
자료형이 그냥 리스트의 pop
연산보다 더 느린 계산 결과를 얻었다.

- 코드
import queue
order = list(map(int, input().strip().split()))
que = queue.SimpleQueue()
[que.put(i) for i in range(1, order[0]+1)]
answer = []
count = 0
while que.qsize():
count += 1
num = que.get(block=False)
if not (count % order[1]):
answer.append(str(num))
else:
que.put(num)
print('<',(', ').join(answer), '>', sep='')
from collections import deque
order = list(map(int, input().strip().split()))
que = deque(range(1, order[0]+1))
answer = []
count = 0
while que:
count += 1
num = que.popleft()
if not (count % order[1]):
answer.append(str(num))
else:
que.append(num)
print('<',(', ').join(answer), '>', sep='')

- 마지막으로 리스트 자료형의
pop
모듈을 사용해본다.
- 코드
order = list(map(int, input().strip().split()))
que = list(range(1, order[0]+1))
answer = []
index = 0
while que:
index = (index+order[1]-1)%len(que)
answer.append(str(que.pop(index)))
print('<',(', ').join(answer), '>', sep='')

- 이전 queue자료형과 다르게 매우 빠른 결과를 보여주었다.
- queue자료형은 한 데이터당 pop과 append연산을 해야한다.
O(N^2)
- list자료형에서 pop연산은 index를 바로 계산하여 pop연산 후, 남은 리스트를 연결하는 작업만 하면 된다.
O(M^2), N >= M
- 만약 원소가 항상 앞에서부터 빼야한다면 queue가 빠르지만, 원소가 중간 또는 마지막에 있다면 list.pop()이 더 빠를 것이다.