팬케이크를 차곡차곡 쌓을 때, 방금 만든 팬케이크를 맨 위에 쌓게 된다. 맨 위에 놓인 팬케이크를 먹는 방식을 '스택'에 비유할 수 있다. 스택은 배열이 수직적으로 쌓여있는 것으로, 배열에서 요소를 추가하거나 삭제할 때 마지막으로 추가된 것부터 처리한다. 이를 "LiFo"라고 한다
👉 새로운 요소는 스택 위에 차곡차곡 쌓이고, 스택의 맨 위에서만 요소를 읽거나 삭제할 수 있다
예) 웹 브라우저의 '뒤로가기'
📒 '뒤로가기'는 웹페이지 히스토리 스택의 맨 위에서 한 페이지를 가져가는 것이디 때문. Ctrl+Z도 스택에 포함
정류장에서 버스를 타기 위해 여러 사람들이 일렬로 서 있다고 가정하면, 맨 앞 줄에 있는 사람부터 순서대로 버스에 탈 것이다. 이러한 방식은 '큐'에 비유될 수 있다. 줄에 가장 뒤에 서서 기다린 사람은 버스에서도 가장 마지막에 탑승하게 되는 것처럼 가장 나중에 '큐'에 입장한 요소가 제일 마지막에 큐에서 나가는 요소가 된다. 이를 "FiFo"라고 한다
👉 큐는 줄 서기와 같다. 새로운 요소는 '큐'의 맨 뒤에 추가되고, 큐위 맨 앞에 있는 요소만 읽거나 삭제할 수 있다
예) 이메일 전달 혹은 푸쉬 알림 기능, 쇼핑몰에서 선착순으로 주문을 처리하는 방식, 콜센터의 백엔드 등
deque는 앞과 뒤에서 데이터를 처리할 수 있는 양방형 자료형으로, 스택처럼 써도 되고 큐처럼 써도 된다. 파이썬의 collections.deque 모듈은 deque 자료형을 생성하는 모듈이다
시계방향으로 1~5가 적힌 다이얼이 있으며 현재 가리키는 눈금은 1일 떄, 오른쪽으로 2칸 돌려 가리키는 눈금이 4가 되도록 하려면 어떻게 해야 할까?
현재: [1, 2, 3, 4, 5]
출력 예시: [4, 5, 1, 2, 3]
deque(a)로 deque 객체를 만든 후 rotate() 함수를 사용하여 2만큼 오른쪽으로 회전하면 첫 값이 4를 가리키게 된다. 마찬가지로 왼쪽으로 2만큼 회전하여 3을 가리키려면 2 대신 -2를 입력하면 된다
from collections import deque
a = [1,2,3,4,5]
q = deque(a)
q.rotate(2) #시계방향 회전은 양수, 그 반대는 음수
result = list(q)
print(result)
deque의 사용 예시
from collections import deque
d = deque([1,2,3,4,5])
d.append(6)
#print(d) #deque([1, 2, 3, 4, 5, 6])
d.appendleft(0)
#print(d) #deque([0, 1, 2, 3, 4, 5, 6])
print(d.pop()) #6
print(d) #deque([0, 1, 2, 3, 4, 5])
print(d.popleft()) #0
print(d) #deque([1, 2, 3, 4, 5])
📁 deque는 list와 매우 비슷하다. 스택과 큐로 사용할 수 있는 메서드도 대부분 일치한다. 다만, deque에는 다음과 같은 메서드가 더 있다
⭐ deque 장점