Post

자료구조 - 큐(Queue)

큐(Queue)의 기본 개념, 동작 원리, 시간복잡도, 실생활 비유 및 활용 예시를 정리한 글입니다.

자료구조 - 큐(Queue)

큐란 무엇일까?

큐(Queue)는 먼저 들어온 데이터가 먼저 나가는 자료구조입니다. 이를 FIFO(First In, First Out) 구조라고 부릅니다.

가장 먼저 들어온 데이터가 가장 먼저 처리되기 때문에, 일상 속 줄 서기(대기열)와 비슷한 원리로 동작합니다.

큐의 구조

큐는 주로 두 가지 기본 연산을 수행합니다:

  • enqueue(인큐): 데이터를 큐의 뒤쪽 에 추가합니다.
  • dequeue(디큐): 큐의 앞쪽 에 있는 데이터를 꺼냅니다.

추가로 자주 쓰는 연산:

  • peek(피크): 삭제하지 않고 가장 앞에 있는 데이터를 확인합니다.

큐는 리스트처럼 인덱스로 직접 접근하는 것이 아니라, 앞에서 꺼내고 뒤에 추가하는 구조입니다.

큐 동작 예시

  1. 큐가 비어 있습니다. → []
  2. enqueue(10)[10]
  3. enqueue(20)[10, 20]
  4. enqueue(30)[10, 20, 30]
  5. dequeue() → 10 꺼냄 → [20, 30]
  6. peek() → 20 확인 → [20, 30]

큐 예시 (Python)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from collections import deque

queue = deque()  # 큐 생성

# enqueue (데이터 추가)
queue.append(10)
queue.append(20)
queue.append(30)

# dequeue (데이터 꺼내기)
print(queue.popleft())  # 출력: 10

# peek (맨 앞 데이터 확인)
print(queue[0])         # 출력: 20

💡 파이썬의 deque(double-ended queue)는 큐 구현에 최적화된 자료구조입니다.

큐의 시간복잡도

연산시간복잡도설명
enqueueO(1)뒤쪽에 데이터를 빠르게 추가합니다.
dequeueO(1)앞쪽 데이터를 빠르게 꺼냅니다.
peekO(1)앞쪽 데이터를 빠르게 확인할 수 있습니다.

큐의 장점과 단점

장점

  • 순서대로 데이터를 처리할 수 있어 일괄 처리에 적합합니다.
  • 구조가 단순하고 직관적입니다.

단점

  • 중간 데이터 접근이 불가능합니다.
  • 크기가 고정된 큐에서는 오버플로우(overflow)가 발생할 수 있습니다.

큐가 활용되는 예시

활용 분야설명
프린터 인쇄 대기열먼저 요청한 문서가 먼저 출력됩니다.
운영체제 작업 스케줄러먼저 도착한 작업부터 처리합니다.
BFS 탐색 알고리즘너비 우선 탐색에서 큐를 사용해 다음 노드를 순차적으로 탐색합니다.
고객 대기 시스템순서대로 고객을 호출하거나 처리하는 데 사용됩니다.

실생활 예시로 이해하기

🧍 큐는 줄 서기와 비슷합니다. 먼저 줄 선 사람이 먼저 서비스를 받고, 뒤에 온 사람은 기다립니다.

예: 은행 번호표, 놀이공원 대기줄, 프린터 인쇄 대기줄 등

정리

항목
데이터 처리 방식FIFO (First In, First Out)
주된 연산enqueue, dequeue, peek
주요 특징앞에서 꺼내고, 뒤에서 넣음
활용 예시작업 스케줄링, BFS, 고객 대기 시스템 등

스택과 큐의 차이점 및 선택 기준

항목스택 (Stack)큐 (Queue)
처리 방식LIFO (후입선출)FIFO (선입선출)
삽입 위치맨 위 (Top)뒤쪽 (Rear)
삭제 위치맨 위 (Top)앞쪽 (Front)
접근 제한오직 맨 위만 접근 가능앞과 뒤에서만 접근 가능
사용 예시실행 취소, 함수 호출, 되돌리기 기능BFS 탐색, 인쇄 대기열, 작업 스케줄링

언제 어떤 구조?

  • 가장 최근의 작업을 먼저 처리해야 한다면 → 스택
  • 먼저 들어온 작업을 먼저 처리해야 한다면 → 큐

예를 들어 함수 호출 처리, 실행 취소 기능은 스택이 적합하고, 인쇄 요청 처리, 고객 응대 시스템처럼 순서를 지켜야 하는 상황에는 큐가 적합합니다.

This post is licensed under CC BY 4.0 by the author.