/


이전에 스택에 대해서 함께 공부해 보았습니다. 스택은 Last In First Out 이라는 것 기억 하시죠?
그렇다면 오늘 공부해볼 Queue는 어떤 방식인지 알아보고, 실습을 해보도록 하겠습니다!!

2022.08.27 - [분류 전체보기] - 파이썬 스택 이란 무엇일까요



1. 큐가 무엇일까 : First in First Out

영화관에 입장하기 위해 줄을 섰을 때 먼저 줄을 선 사람이 제일 먼저 들어갈 수 있는데요, 
이러한 방식을 '큐' 라고 합니다. 가장 먼저 줄을 선 사람이 가장 먼저 줄을 빠져 나간다! 그래서 큐를 First In First Out 이라고 한답니다.

Enqueue? Dequeue?

자료를 넣는 것을 Enqueue 라고 하고 반대로 넣어둔 자료를 꺼내는 것을 Dequeue 이라고 합니다!
스택의 Push/Pop 에 맞춰서 이해할 수 있어요~ 


스택과 비교해보면 아래와 같습니다.  

  삽입 출력
Stack Push
append(value)
Pop
pop()
Queue Enqueue
append(value)
Dequeue
popleft()



2. 큐 구현하기

보통 파이썬에서 큐를 구현할 때는 deque를 import 하여 사용합니다.
Enqueue 는 append() 를 사용하고, Dequeue는 popleft() 를 사용합니다.

파이썬에서 리스트를 활용하여 스택을 구현할 때 용어가 비슷해서 이해하기 쉽겠죠~
값을 넣는 Enqueue 동작은 append() 를 사용해요.

다른 점은 popleft() 를 사용한다는 것 입니다. 보통 가장 0번 인덱스를 가장 왼쪽, 즉 제일 먼저 추가된 값이라고 생각합니다.

그렇기 때문에 popleft() 라는 함수로 값을 빼내는 것 입니다.

파이썬에서  deque를 사용하여 큐 동작을 확인해보겠습니다.

>>> from collections import deque
>>> queue = deque()
>>> queue
deque([]) # 소괄호 안에 리스트 형태
>>> queue.append(1) # 1번째로 Enqueue 하는 item
>>> queue.append(2) # 2번째로 Enqueue 하는 item
>>> queue.append(3) # 3번째로 Enqueue 하는 item
>>> queue
deque([1, 2, 3]) # 1,2,3 을 추가한 상태
>>> queue.popleft() # Dequeue 꺼내는 동작
1
>>> queue.popleft() # Dequeue 꺼내는 동작
2
>>> queue
deque([3])



참고사항
리스트의 append/pop 을 통해서도 큐 처럼 동작하게 끔 할 수 있어요. 
Enqueue 과정을 List.append() 로 하고 Dequeue 과정을 List.pop(0) 으로 대체하여 사용하면 되긴 되거든요!리스트 특성상 속도가 느려지기 때문에 deque를 사용한다고 알고 있으면 됩니다.

Enqueue Dequeue 동작 예시 입니다.



3. 마무리
Queue 가 무엇인지에 대해 알아보며 stack과 유사한 점과 다른점에 대해서 공부했습니다.
제가 면접 갔을때 가장 기초로 물어보는 질문이 스택과 큐 자료구조의 차이점을 설명하라는 것 이었는데요,
자주 물어본다는 건 꼭 알고 있어야 하는 자료구조라는 의미가 되겠네요~

+ Recent posts