Language/알고리즘
Python deque
스우스우03
2025. 4. 8. 11:27
1. deque
1.1 deque 개요
- deque는 collections 모듈에서 제공되는 자료구조로,
- 양쪽 끝에서 삽입과 삭제가 모두 가능한 큐(Double-Ended Queue)이다.
- 리스트(list)보다 양끝 삽입/삭제 연산에서 시간복잡도가 우수하여 성능적으로 효율적인 경우가 많다.
- from collections import deque
1.2 deque의 주요 특징
1.2.1 양방향 입출력 지원
- 리스트는 pop(0)처럼 앞에서 제거 시 O(n) 시간이 걸리는 반면,
- deque는 O(1)의 시간 복잡도로 앞에서도 빠르게 처리할 수 있다.
1.2.2 내부적으로 연결 리스트(혹은 블록 연결 배열)로 구현
- 메모리 재할당이 자주 발생하는 list에 비해, deque는 안정적인 삽입/삭제 속도를 제공한다.
1.2.3 thread-safe
- deque는 thread-safe하여 멀티스레딩 환경에서도 안전하게 사용할 수 있다.
1.3 deque의 생성
from collections import deque
dq = deque() # 빈 deque 생성
dq = deque([1, 2, 3]) # 초기값을 가진 deque 생성
dq = deque('hello') # 문자열을 각 문자로 나누어 deque 생성
dq = deque(maxlen=5) # 최대 길이를 지정한 deque 생성 (자동 회전 기능 포함)
1.4 주요 메서드 및 사용 예시
1.4.1 append() / appendleft()
dq.append(10) # 오른쪽 끝에 요소 추가
dq.appendleft(5) # 왼쪽 끝에 요소 추가
1.4.2 pop() / popleft()
dq.pop() # 오른쪽 끝 요소 제거 및 반환
dq.popleft() # 왼쪽 끝 요소 제거 및 반환
1.4.3 extend() / extendleft()
dq.extend([20, 30]) # 오른쪽 끝에 여러 요소 추가
dq.extendleft([40, 50]) # 왼쪽 끝에 여러 요소 추가 (반대 순서로 추가됨)
1.4.4 rotate()
dq.rotate(1) # 오른쪽으로 1칸 회전
dq.rotate(-1) # 왼쪽으로 1칸 회전
- rotate(n)은 n칸만큼 요소들을 회전시킨다. 양수는 오른쪽, 음수는 왼쪽 회전이다.
1.4.5 maxlen 속성
dq = deque(maxlen=3)
dq.append(1)
dq.append(2)
dq.append(3)
dq.append(4)
print(dq) # deque([2, 3, 4], maxlen=3)
- maxlen을 설정하면 큐의 길이를 넘는 요소가 들어올 경우 자동으로 가장 오래된 요소가 제거된다.