Topic

덱(Deque, Double-Ended Queue)

JackerLab 2025. 3. 29. 19:58
728x90
반응형

개요

덱(Deque, Double-Ended Queue)은 양쪽 끝(front, rear) 모두에서 삽입과 삭제가 가능한 선형 자료구조이다. 일반 큐는 FIFO, 스택은 LIFO 원칙만 따르지만, 덱은 스택과 큐의 기능을 모두 갖춘 유연한 자료구조로, 양방향에서 데이터를 처리할 수 있다. 파이썬에서는 collections.deque 모듈을 통해 효율적인 덱을 구현할 수 있다.


1. 개념 및 정의

구성 요소 설명
front 덱의 앞쪽 끝, 요소 삽입/삭제 가능
rear 덱의 뒤쪽 끝, 요소 삽입/삭제 가능
연산 append, appendleft, pop, popleft, peek

덱은 입력 제한 덱(Input-Restricted Deque), 출력 제한 덱(Output-Restricted Deque) 등으로 확장 가능하다.


2. 주요 연산 예시

from collections import deque

dq = deque()
dq.append(10)        # rear 삽입
dq.appendleft(5)     # front 삽입
print(dq.pop())      # rear 삭제 → 10
print(dq.popleft())  # front 삭제 → 5

3. 시간 및 공간 복잡도

연산 시간 복잡도
append / appendleft O(1)
pop / popleft O(1)
peek O(1)

deque는 양쪽에서 빠른 삽입/삭제를 제공하는 자료구조다.


4. 덱 vs 큐 vs 스택 비교

항목 스택
입출력 방향 한쪽(LIFO) 양쪽(FIFO) 양쪽 모두 가능
삽입 위치 Top Rear Front & Rear
삭제 위치 Top Front Front & Rear
사용 예시 함수 호출, 수식 계산 BFS, 이벤트 처리 슬라이딩 윈도우, 캐시 구현

5. 덱의 활용 사례

분야 활용 예시
슬라이딩 윈도우 최댓값 최대값/최솟값을 O(1)로 유지하며 계산
캐시 알고리즘 LRU 캐시 (front에 삽입, rear에서 제거 등)
문자열 처리 회문 판별 (앞뒤에서 비교)
게임 개발 캐릭터 이동 히스토리 저장/복원
알고리즘 문제풀이 0-1 BFS, 스택-큐 통합 구조 구현

6. 구현 구조

덱은 내부적으로 이중 연결 리스트 또는 원형 배열을 기반으로 구현될 수 있다.

구현 방식 설명 특징
이중 연결 리스트 앞뒤 포인터로 구성 삽입/삭제 유연, 메모리 사용 ↑
원형 배열 기반 front/rear 인덱스 순환 사용 고정 크기, 빠른 성능

파이썬의 collections.deque는 C로 구현된 원형 이중 연결 리스트 기반이다.


7. 파이썬 덱 메서드 정리

메서드 설명
append(x) 뒤에 x 추가
appendleft(x) 앞에 x 추가
pop() 뒤 요소 제거 및 반환
popleft() 앞 요소 제거 및 반환
extend(iter) 뒤에 여러 개 추가
extendleft(iter) 앞에 여러 개 추가
rotate(n) 요소를 n만큼 회전

8. 결론

덱은 큐와 스택의 장점을 결합한 유연한 자료구조로, 양방향 삽입/삭제가 모두 필요한 경우 매우 유용하다. deque는 알고리즘 문제풀이뿐 아니라, 캐시 구조, 윈도우 계산, 이벤트 처리 등 다양한 실무 환경에서도 활용 가능하며, 자료구조 학습의 필수 개념 중 하나다.

728x90
반응형

'Topic' 카테고리의 다른 글

이진 트리(Binary Tree)  (0) 2025.03.29
트리(Tree)  (0) 2025.03.29
큐(Queue)  (0) 2025.03.29
스택(Stack)  (0) 2025.03.29
Linked List(연결 리스트)  (0) 2025.03.29