1. Deque의 개념과 구조
Deque(데크)는 double-ended-queue의 줄임말로, 양방향에서 데이터를 처리할 수 있는 queue형 자료구조이다.
아래 그림과 같이, 양방향에서 엘리먼트를 추가, 삭제할 수 있는 양방향 큐라고 생각하면 된다.
2. Deque에 존재하는 메서드 종류
Python에서 deque는 collections라는 모듈안에 deque클래스로 내장되어있다.
가장 기본적인 append() 메서드를 수행하면 다음과 같다.
|
from collections import deque |
|
|
|
deq = deque(['a', 'b', 'c']) |
|
deq.append('d') |
|
print(deq) # deque(['a', 'b', 'c', 'd']) |
기본 append()를 해주면 위의 예제와 같이 가장 오른쪽에 엘리먼트가 삽입된다.
엘리먼트를 왼쪽 끝에 삽입하고 싶은 경우, appendleft()를 사용하면 된다. 이밖에도 다양한 종류의 메서드가 존재한다.
deque.append(x) : x를 데크의 오른쪽 끝에 삽입한다
deque.appendleft(x) : x를 데크의 왼쪽 끝에 삽입한다
deque.pop() : 데크의 오른쪽 끝 엘리먼트를 가져오는 동시에 데크에서는 삭제한다
deque.popleft() : 데크의 왼쪽 끝 엘리먼트를 가져오는 동시에 데크에서는 삭제한다
deque.extend(array) : 배열 array를 순환하면서 데크의 오른쪽에 추가한다
deque.extendleft(array) : 배열 array를 순환하면서 데크의 왼쪽에 추가한다
deque.remove(x) : x를 데크에서 찾아 삭제한다
deque.rotate(num) : 데크를 num만큼 회전한다 (양수면 오른쪽, 음수는 왼쪽으로)
3. Deque를 쓰는 이유
deque는 list(LinkedList를 제외한)보다 속도가 빠르고, 쓰레드 환경에서 안전하기 때문이다.
pop( )와 같은 메서드를 수행할 때 리스트의 경우 O(N)연산을 수행하지만 deque는 O(1) 연산을 수행한다.
따라서, push와 pop이 빈번한 알고리즘의 경우, list보다 deque를 사용하는것이 효율적이며 속도가 더 빠르다.
덱을 활용하는 문제!!
https://www.acmicpc.net/problem/1021
1021번: 회전하는 큐
첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가
www.acmicpc.net
https://www.acmicpc.net/problem/5430
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
'CS 과목(CS科目) > 자료 구조(Data Structure)' 카테고리의 다른 글
DB Index에서 사용되는 B-Tree (데이터 삭제) (0) | 2023.03.10 |
---|---|
DB Index에서 사용되는 B tree(데이터 삽입) (0) | 2023.03.10 |
원형 큐(Circular Queue)를 사용하는 이유!!! (0) | 2023.01.15 |
Stack, Queue, List, set 등의 자료구조 사용 시 주의 사항 (0) | 2023.01.13 |
기술 문서에서 Queue라는 용어를 만났을 때의 주의점 (0) | 2023.01.13 |