본문으로 건너뛰기
실습하기

줄을 서는 대기열, 큐(Queue)

큐(Queue)줄을 서는 대기열과 같은 자료구조입니다.

먼저 줄을 선 사람이 가장 먼저 서비스를 받는 것처럼, 큐에서는 먼저 들어온 데이터가 먼저 처리됩니다.

이러한 구조로 인해 큐는 FIFO(First In, First Out), "먼저 들어온 것이 먼저 나간다"라는 원칙을 따르는 자료구조입니다.


큐는 어떻게 활용되나요?

  • 프린터 작업 대기열: 프린터는 먼저 들어온 인쇄 작업을 먼저 처리합니다.

  • 콜센터 대기열: 고객이 전화를 걸면 대기열에 추가되고, 상담원이 자유로워지면 먼저 대기 중인 고객부터 상담을 시작합니다.


큐의 주요 연산

큐에서 자주 사용하는 연산은 다음과 같습니다.

  • enqueue: 큐의 끝에 새로운 데이터를 추가하는 연산입니다.

  • dequeue: 큐의 앞에서 데이터를 제거 및 반환하는 연산입니다.

  • peek: 큐의 앞에 있는 데이터를 제거하지 않고 확인하는 연산입니다.

  • is_empty: 큐가 비어 있는지를 확인하는 연산입니다.


파이썬에서의 큐 구현

리스트의 append() 메서드를 사용해 데이터를 추가하고, pop(0) 메서드를 사용해 데이터를 제거하면 큐의 기본적인 기능을 구현할 수 있습니다.

파이썬에서의 큐 구현 예제
class Queue:
# 큐 초기화
def __init__(self):
self.queue = []

# 큐에 데이터 추가
def enqueue(self, item):
self.queue.append(item)
print(f"Enqueue: {item}가 큐에 추가되었습니다.")

# 큐에서 데이터 제거
def dequeue(self):
if not self.is_empty():
item = self.queue.pop(0)
print(f"Dequeue: {item}가 큐에서 제거되었습니다.")
return item
else:
print("Dequeue: 큐가 비어 있습니다.")
return None

# 큐의 가장 앞에 있는 데이터 확인
def peek(self):
if not self.is_empty():
return self.queue[0]
else:
print("Peek: 큐가 비어 있습니다.")
return None

# 큐가 비어 있는지 확인
def is_empty(self):
return len(self.queue) == 0

# 큐 사용 예시
my_queue = Queue()
my_queue.enqueue(1) # Enqueue: 1이 큐에 추가
my_queue.enqueue(2) # Enqueue: 2가 큐에 추가

print(f"Peek: 현재 큐의 가장 앞에 있는 값은 {my_queue.peek()}입니다.")

my_queue.dequeue() # Dequeue: 1이 큐에서 제거
my_queue.dequeue() # Dequeue: 2가 큐에서 제거
my_queue.dequeue() # 큐가 비어 있어 제거할 수 없음

정리하면?

  • 큐는 FIFO(First In, First Out) 구조를 따르는 자료구조입니다.

  • 주요 연산으로는 enqueue(추가), dequeue(제거), peek(데이터 확인), is_empty(비어 있는지 확인)이 있습니다.

다음 내용이 궁금하다면?

코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!