7강 / 20강
큐와 덱 — 먼저 온 사람이 먼저
줄 서기, 그리고 앞뒤로 다 되는 줄
급식실 줄을 새치기하면 어떻게 되나요? 난리가 나죠. 먼저 온 사람이 먼저 받는다는 규칙이 FIFO(First In, First Out)이고, 이 규칙의 자료구조가 큐(queue)입니다.
📚 스택 (LIFO)
넣는 곳과 빼는 곳이 같은 쪽마지막에 넣은 것이 먼저
되돌아가기 · 실행 취소
🚶 큐 (FIFO)
넣는 곳과 빼는 곳이 반대쪽먼저 넣은 것이 먼저
순서 지키기 · 대기열
프린터 인쇄 대기열, 게임 매칭 대기줄, 고객센터 상담 순서 — 전부 큐입니다.
리스트로 만든 큐 — 동작은 맞지만, 문제가 하나 있습니다.
Python
브라우저에서 실행
deque — 양쪽 끝이 모두 빠른 줄
collections.deque(데크, double-ended queue)는
맨 앞과 맨 뒤 모두 즉시 넣고 뺄 수 있게 만들어진 자료구조입니다.
8강에서 배울 연결 리스트와 비슷한 방식으로 만들어져서, 밀어내기가 아예 일어나지 않아요.
deque 는 앞뒤 네 가지 동작이 전부 빠릅니다.
Python
브라우저에서 실행
🎮 줄 서기 실험실 — 속도까지 재 봅니다
사람을 줄에 세우고 빼면서 큐가 어떻게 도는지 보세요.
아래쪽 속도 대결 버튼을 누르면 list.pop(0) 과 deque.popleft() 의
차이가 숫자로 나옵니다.
3만 명 줄을 다 빼는 데 걸리는 시간. 직접 재 봅니다.
Python
브라우저에서 실행
덱(deque)은 스택도 되고 큐도 됩니다
양쪽 끝이 다 열려 있으니, 어느 쪽으로 넣고 어느 쪽으로 빼느냐만 정하면 됩니다.
| 쓰고 싶은 것 | 넣기 | 빼기 |
|---|---|---|
| 스택 (LIFO) | append() | pop() — 같은 쪽 |
| 큐 (FIFO) | append() | popleft() — 반대쪽 |
| 덱 (양쪽) | append() / appendleft() | pop() / popleft() |
15강에서 미로를 탐색할 때, 같은 코드에서 이 한 줄만 바꿔 BFS와 DFS를 오가게 됩니다.
덱의 양쪽 끝을 동시에 쓰는 대표적인 예.
Python
브라우저에서 실행
🤔 확인 문제
큐에 A, B, C 를 넣은 뒤 두 번 꺼내면 나오는 순서는?
해설 큐는 FIFO — 먼저 들어온 A가 먼저 나옵니다. 스택이었다면 C, B 였겠죠.
🤔 확인 문제
파이썬 리스트로 큐를 만들면 안 되는 이유는?
해설 동작은 맞지만 느립니다. 큐가 클수록 심해져요.
collections.deque는 밀어내기 없이 앞뒤를 모두 즉시 처리합니다.🤔 확인 문제
deque 로 스택을 만들려면?해설 같은 쪽에서 넣고 빼면 LIFO(스택), 반대쪽이면 FIFO(큐)입니다. 자료구조는 그릇이 아니라 규칙이라는 걸 보여 주는 좋은 예예요.