728x90
반응형
덱이란?
- 덱은 "double-ended queue"의 줄인말로, 양끝에서 삽입 삭제가 가능한 큐를 의미한다.
- 즉, 덱은 큐와 스택의 특징을 모두 지닌다.
덱의 종류
- 스크롤(scroll) : 삽입이 한쪽 끝으로만 가능하도록 설정한 데크(입력 제한 데크)
- 셀프(self) : 삭제가 한쪽 끝으로만 가능하도록 설정한 데크(출력 제한 데크)
덱의 특징
- 덱은 양 방향에서 삽입과 삭제가 동시에 일어날 수 있다.
- 종류에 따라 스크롤 덱과 셀프 덱을 구현할 수도 있다.
- 동적으로 크기를 조절할 수 있다.
- 덱의 연산은 덱의 앞에 원소 추가, 덱의 뒤에 원소 추가, 덱의 앞에 있는 원소 삭제, 덱의 뒤에 있는 원소 삭제, 덱의 앞에 있는 원소 읽기, 덱의 뒤에 있는 원소 읽기, 사이즈 확인, 비어있는지 확인이 있다.
덱의 시간복잡도
- 덱의 앞에 원소 추가(addFirst)
- 덱의 앞에 원소를 추가한다.
- 따라서 시간복잡도는 O(1)이다.
- 덱의 뒤에 원소 추가(addLast)
- 덱의 뒤에 원소를 추가한다.
- 따라서 시간복잡도는 O(1)이다.
- 덱의 앞에 있는 원소 삭제(removeFirst)
- 덱의 앞에 있는 원소를 삭제한다.
- 따라서 시간복잡도는 O(1)이다.
- 덱의 뒤에 있는 원소 삭제(removeLast)
- 덱의 뒤에 있는 원소를 삭제한다.
- 따라서 시간복잡도는 O(1)이다.
- 덱의 앞에 있는 원소 읽기(peekFirst)
- 덱의 앞에 있는 원소를 읽어온다.
- 따라서 시간복잡도는 O(1)이다.
- 덱의 뒤에 있는 원소 읽기(peekLast)
- 덱의 뒤에 있는 원소를 읽어온다.
- 따라서 시간복잡도는 O(1)이다.
- 덱의 사이즈 확인(size)
- 덱의 사이즈를 확인한다.
- 따라서 시간복잡도는 O(1)이다.
- 덱이 비어있는지 확인(isEmpty)
- 덱이 비어있는지 확인한다.
- 따라서 시간복잡도는 O(1)이다.
덱의 장단점
- 장점
- 양쪽에서 삽입 삭제가 모두 가능하여 양쪽 끝 연산이 모두 O(1)이 된다.
- 슬라이싱 윈도우, 양방향 탐색, 최단 경로 알고리즘 등 여러 알고리즘에서 사용할 수 있다.
- 큐와 스택의 특징을 모두 갖고잇어, 상황에 따라 유연하게 활용할 수 있다.
- 단점
- 양쪽의 연산을 모두 효율적으로 지원해야 하기에 구현이 간단하지 않을 수 있다.
- 덱의 크기를 동적으로 조절하기 때문에 메모리 낭비가 클 수 있다.
예제
import java.util.*;
fun main() {
var deque = ArrayDeque<Int>()
deque.addFirst(1)
deque.addLast(2)
deque.addFirst(3)
println(deque.first)
println(deque.last)
deque.removeLast()
deque.removeFirst()
deque.removeFirst()
}
출처 : 덱 - 위키백과
728x90
반응형
'개념정리 > 자료구조' 카테고리의 다른 글
[자료구조] 트리(Tree)란? (1) | 2023.11.27 |
---|---|
[자료구조] 연결리스트(Linked List)란? (0) | 2023.11.25 |
[자료구조] 원형 큐(Circle Queue) (1) | 2023.11.18 |
[자료구조] 큐(Queue)란? (0) | 2023.11.15 |
[자료구조] 스택(Stack)이란? (1) | 2023.10.30 |