🖥️ 컴퓨터 싸이언스

Python3 | 파이썬에서 큐(queue)를 사용하자 (deque 사용법)

노바깅 2023. 4. 11. 16:34

큐와 스택은 자료구조의 기본이라고 볼 수 있는데 파이썬에서는 이를 어떻게 구현하면 좋을까!

 

사실 파이썬은 워낙 리스트와 인덱싱이 편리하게 되어 있어서 리스트만으로도 구현할 수는 있다.

lst.pop(0)	# 가장 왼쪽의 요소를 꺼내준다. (queue에서의 dequeue)
lst.pop()	# 가장 오른쪽의 요소를 꺼내준다. (stack에서의 pop)

하지만 위처럼 구현했을 때 가장 큰 문제점은 너무 느리다는 것이다.

그래서 효율성 검사 같이 시간제한이 있는 문제에서는 일반적으로 list와 pop 조합 대신에 deque를 사용한다.

 

from collections import deque

사실 deque 사용법은 엄청 간단하다. list와 큰 차이가 없다!

from collections import deque

queue = [1,2,3]
queue = deque(queue)

queue.append(4)
queue.appendleft(0)

queue.popleft()
queue.popright()

위의 코드는 무슨 흐름이 있는 것은 아니고, 그냥 자주 쓰는 함수들을 적어보았다.

 

일단, deque를 import하고 파이썬에서 리스트를 생성하듯이 생성한다. 추가로 설치해야하는 패키지가 아니라 코테에서도 유용하게 사용할 수 있다ㅎㅎ. 생성된 리스트를 deque로 감싸주기만 하면 deque가 제공하는 다양한 함수를 사용할 수 있다.

 

 파이썬의 list처럼, 똑같이 [code]append[/code]함수를 지원하는데 list의 append와 동일한 역할을 한다. deque는 [code]appendleft[/code]도 지원을 하는데, 이는 가장 왼쪽에 요소를 추가해주는 함수이다. [code]queue.appendleft(0)[/code] 까지 코드가 진행되면 아마 queue 안에는 [code]deque()[0, 2, 3, 4][/code] 가 존재할 것이다.

 

 [code]popleft()[/code], [code]popright()[/code]은 이름에서 알 수 있듯이 각각 가장 왼쪽에 있는 요소와 가장 오른쪽에 있는 요소를 꺼내준다. 위의 코드에서는 return 값을 안 적어놨지만, 만약 [code]queue.popleft()[/code] 대신 [code]a = queue.popleft()[/code]로 코드를 작성했다면 [code]a[/code]에는 0이 저장되어 있을 것이다.