DSData StructuresPython learning path
0 / 12 완료
LESSON 04

먼저 들어온 일을 먼저 처리하는 FIFO 구조

왜 큐을 쓸까요?

도착 순서를 공정하게 지키면서 일을 처리하거나, 가까운 상태부터 단계별로 탐색할 때 씁니다. 대기열과 BFS가 같은 구조를 쓰는 이유가 바로 FIFO 규칙입니다.

LIFE EXAMPLE

생활 속에서 먼저 이해해 볼까요?

코드를 생각하지 말고, 아래 상황이 어떤 순서로 움직이는지만 따라가 보세요.

현실 예시 1

빵집 계산 줄

먼저 줄을 선 사람이 먼저 계산하고, 새 손님은 줄의 맨 뒤에 섭니다.

자료구조와 연결하면먼저 들어온 값이 먼저 나오는 FIFO 규칙입니다.
현실 예시 2

가정용 프린터

보고서, 사진, 영수증 순서로 인쇄를 누르면 프린터도 그 순서대로 처리합니다.

자료구조와 연결하면들어온 작업을 공정하게 앞에서부터 꺼내는 큐입니다.

실무에서는 이렇게 씁니다

코딩 테스트의 장난감 예제를 넘어, 실제 시스템에서 같은 원리가 어디에 숨어 있는지 연결해 보세요.

01

작업 처리

메일 전송·이미지 변환 같은 비동기 작업을 도착 순으로 소비합니다.

02

트래픽 완충

순간적으로 몰린 요청을 큐에 잠시 저장해 서버 과부하를 줄입니다.

03

BFS

시작점에서 거리 1, 거리 2 순서로 정점을 방문합니다.

04

고객 상담

문의가 접수된 순서대로 상담원에게 배정해 대기 순서를 지킵니다.

05

영상 스트리밍

도착한 프레임을 버퍼에 넣고 먼저 받은 프레임부터 재생합니다.

어떤 원리로 동작하나요?

뒤(rear)에서 넣고 앞(front)에서 뺍니다. 파이썬 리스트의 pop(0)은 이동 비용이 들기 때문에 collections.deque의 append와 popleft를 사용해야 양쪽 연산이 O(1)입니다.

핵심 연산과 비용

연산Python 표현시간
뒤에 넣기q.append(x)O(1)
앞에서 빼기q.popleft()O(1)
앞 확인q[0]O(1)
포함 확인x in qO(n)
STEP BY STEP

BFS 대기열 변화

  1. 1
    시작점 Aqueue = [A], visited = {A}
  2. 2
    A 처리이웃 B, C 추가 → queue = [B, C]
  3. 3
    B 처리새 이웃 D 추가 → queue = [C, D]
  4. 4
    C 처리새 이웃 없음 → queue = [D]

⚠ 자주 하는 실수

  • 리스트에서 pop(0)을 반복하지 말고 deque를 사용합니다.
  • 큐에 넣을 때 방문 처리해야 같은 노드가 여러 번 들어가지 않습니다.
  • 작업 큐에서는 실패 재시도, 중복 처리, 순서 보장 범위를 별도로 설계해야 합니다.