Queue는 이미 대학교에서 배웠구, 이미 잘 알고 있는 내용이지만, 그때의 나는 이미 알고리즘을 안 써 본지 너무 오래되기도 했구... 코테를 공부하고 있는 시점이니. 다시 큐에 대해서 정리하는 방법을 적어본다.
Queue는 기본적으로 선입선출되는 자료구조이다. 그렇기에 'FIFO (First in, First out)방식으로 작동한다. 즉, 먼저 들어가서 먼저 나간다는 점이다.이렇게 간단하게 알아보았다.
from collections import deque
# 큐 생성
queue = deque()
# 큐에 요소 추가
queue.append(1)
queue.append(2)
queue.append(3)
# 큐에서 요소 제거 (FIFO)
print(queue.popleft()) # 출력: 1
print(queue) # 출력: deque([2, 3])
deque를 사용하는 이유는 list를 사용할 경우, 앞의 데이터를 모두 앞으로 끌어와야 하고 그렇게 할 경우 시간 복잡도가 늘어나기 때문에 collections 라이브러리를 사용하는 게 더 효율적입니다.
또한 쓰는 이유는
- 효율적인 성능
O(1) 시간 복잡도: deque는 양쪽 끝에서의 삽입과 삭제가 O(1) 시간 복잡도로 수행됩니다. 이는 리스트의 경우, 앞쪽에서 요소를 제거할 때 O(n)의 시간 복잡도가 걸리는 것과 대조적입니다. 따라서 큐(First In First Out)나 스택(Last In First Out)으로 사용할 때 성능이 뛰어납니다.- 양방향 접근
양쪽 끝에서의 작업: deque는 양쪽 끝에서 요소를 추가하거나 제거할 수 있습니다. 즉, 큐로 사용할 때는 앞에서 제거하고 뒤에서 추가하는 것이 가능하며, 스택으로 사용할 때는 뒤에서만 작업할 수 있습니다.- 유연성
다양한 활용: deque는 큐와 스택 이외에도 다양한 알고리즘이나 데이터 구조를 구현하는 데 사용할 수 있습니다. 예를 들어, 슬라이딩 윈도우 알고리즘, BFS(너비 우선 탐색) 등에서 유용하게 사용됩니다.- 내장 기능
기본적인 메서드 제공: deque는 append(), popleft(), appendleft(), pop() 등의 메서드를 제공하여 큐와 스택을 쉽게 구현하고 사용할 수 있게 해줍니다.
다음과 같은 이유가 있습니다.