파이썬을 이용하여 코딩테스트를 하다가 데크(deque)라는 자료구조를 많이 접하게 되어 확실하게 알고 넘어가는것이 좋을 것 같아 오늘은 이 데크(deque)에 대해서 정리를 해보는 시간을 가지려고 한다!
자료구조형으로 잘 알려진 stack은 후입선출(LIFO) 가장 나중에 들어온 데이터가 먼저 나가는 구조이고 queue는 선입선출(FIFO) 가장 먼저 들어온 데이터가 가장 먼저 나가는 구조로 고정 되어있는 구조이다.
데크(deque)는 양방향(앞,뒤)으로 데이터를 추가하거나 제거할 수 있는 자료형이기 때문에 stack
처럼 사용할 수도 있고 queue
처럼 사용할 수도 있다!
시간복잡도에 따르면 list는 데이터를 추가하거나 제거할때O(n)의 속도, deque는 O(1)의 속도로 가장 빠른 속도에 속한다.
데크를 사용하기 위해서는 모듈을 collections에 deque를 import해야하고 아래와 같이 배열을 작성한다음 출력하면 다음과 같이 출력된다.
from collections import deque
queue = deque(['one', 'two', 'three'])
print(queue) # deque(['one', 'two', 'three'])
print(*queue) # one two three
함수들은 아래와 같이 구성되어 있다.
append(x)
데크의 오른쪽에 x를 추가합니다.from collections import deque queue = deque(['one', 'two']) queue.append('three') print(queue) # deque(['one', 'two', 'three'])
appendleft(x)
데크의 왼쪽에 x를 추가합니다.from collections import deque queue = deque(['one', 'two']) queue.appendleft('three') print(queue) # deque(['three', 'one', 'two'])
pop()
데크의 오른쪽에 값을 가져오는 동시에 데크에서 삭제합니다.from collections import deque queue = deque(['one', 'two']) print(queue.pop()) # two print(queue) # deque(['one'])
popleft()
데크의 왼쪽에 값을 가져오는 동시에 데크에서 삭제합니다.from collections import deque queue = deque(['one', 'two']) print(queue.popleft()) # one print(queue) # deque(['two'])
reverse()
데크의 요소들의 순서를 뒤집습니다.from collections import deque queue = deque(['one', 'two']) queue.reverse() print(queue) # deque(['two', 'one'])
rotate(x)
데크의 요소들을 x만큼 회전 시킵니다.
시계방향은 양수, 반시계 방향은 음수입니다.from collections import deque queue = deque(['one', 'two', 'three','four']) queue.rotate(2) # 시계뱡향으로 요소 2개만큼 회전됌 print(queue) # deque(['three', 'four', 'one', 'two'])
remove(x)
데크의 요소 중 x를 삭제합니다.from collections import deque queue = deque(['one', 'two', 'three','four']) queue.remove('two') print(queue) # deque(['one', 'three', 'four'])
extend(x)
데크의 오른쪽 끝에 x요소를 붙입니다.from collections import deque queue1 = deque(['one', 'two']) queue2 = ['three','four'] queue1.extend(queue2) print(queue1) # deque(['one', 'two', 'three', 'four'])
extendleft(x)
데크의 왼쪽 끝에 x요소를 붙입니다.from collections import deque queue1 = deque(['one', 'two']) queue2 = ['three','four'] queue1.extendleft(queue2) print(queue1) # deque(['three','four', 'one', 'two'])
clear()
데크에서 모든 요소를 제거합니다.from collections import deque queue = deque(['one', 'two', 'three','four']) queue.clear() print(queue) # deque([])
데크(deque)를 정리하면서 자료구조라는 것은 정말 적절한 환경에서 사용한다면 빠른 속도로 실행될 수 있다는 것을 깨닫는 시간이였습니다.
그리고 다시 한 번 복습하는 시간을 가지게 되니 머리에 잘 정리되는거 같습니다.
앞으로도 이런식으로 배운것들은 까먹지 않도록 적는 습관을 계속해서 유지할 생각입니다!