데크(deque)
double-ended queue의 줄임말로 큐의 앞(front)과 뒤(rear)에서 삽입과 삭제가 가능한 큐를 의미한다.
파이썬 collections.deque
요소 추가deque.append(x)
deque의 오른쪽(마지막)에 삽입한다.
import collections
deq = collections.deque(['a', 'b', 'c'])
deq.append('d')
# deque(['a', 'b', 'c', 'd'])
요소 추가deque.appendleft(x)
deque의 왼쪽(앞)에 삽입한다.
deq = collections.deque(['a', 'b', 'c'])
deq.appendleft('d')
# deque(['d', 'a', 'b', 'c'])
iterable 추가 deque.extend(iterable)
iterable argument(list, tuple, str)를 오른쪽(마지막)에 삽입한다.
deq = collections.deque(['a', 'b', 'c'])
deq.extend('d')
# deque(['a', 'b', 'c', 'd'])
iterable 추가 deque.extendleft(iterable)
iterable argument(list, tuple, str)를 왼쪽(앞)에 삽입한다.
deq = collections.deque(['a', 'b', 'c'])
deq.extendleft('d')
# deque(['d', 'a', 'b', 'c'])
append와 extend 차이점
a = ['a', 'b','c']
b = ['a', 'b','c']
a.append('de')
b.extend('de')
print('append 결과 : ', a)
print('extend 결과 : ', b)
# append 결과 : ['a', 'b', 'c', 'de']
# extend 결과 : ['a', 'b', 'c', 'd', 'e']
요소 제거deque.pop()
오른쪽(마지막)에서 부터 차례대로 제거와 반환한다.
deq = collections.deque(['a', 'b', 'c'])
print('deque.pop() :', end=' ')
while True:
try:
print(deq.pop(), end=' ')
except:
break
# deque.pop() : c b a
요소 제거deque.popleft()
왼쪽(앞)에서 부터 차례대로 제거와 반환한다.
deq = collections.deque(['a', 'b', 'c'])
print('deque.popleft() :', end=' ')
while True:
try:
print(deq.popleft(), end=' ')
except:
break
# deque.popleft() : a b c
요소 회전deque.rotate(n)
요소를 값만큼 회전 해주는 메소드이다. 인자(n) 값이 음수이면 왼쪽으로 회전하고, 양수이면 오른쪽으로 회전한다.
deq = collections.deque(['a', 'b', 'c', 'd', 'e'])
deq.rotate(1)
print('deq >>', ' '.join(deq))
deq2 = collections.deque(['a', 'b', 'c', 'd', 'e'])
deq2.rotate(2)
print('deq2 >>', ' '.join(deq2))
deq3 = collections.deque(['a', 'b', 'c', 'd', 'e'])
deq3.rotate(-1)
print('deq3 >>', ' '.join(deq3))
deq4 = collections.deque(['a', 'b', 'c', 'd', 'e'])
deq4.rotate(-2)
print('deq4 >>', ' '.join(deq4))
# deq >> e a b c d
# deq2 >> d e a b c
# deq3 >> b c d e a
# deq4 >> c d e a b
데크의 시간 복잡도
함수 | 시간복잡도 |
---|---|
append | O(1) |
appendleft | O(1) |
pop | O(1) |
popleft | O(1) |
extend | O(k) |
extendleft | O(k) |
rotate | O(k) |
remove | O(n) |