Data structures (with python) - 6. Queue
Data structures (with python) - 6. Queue
๐ก Queue is a linear collection of items where items are inserted and removed in a particular order. The queue is also called a FIFO Data Structure because it follows the “First In, First Out” principle i.e., the item that is inserted in the first is the one that is taken out first.
ํ๋ ํน์ ์์๋ก ํญ๋ชฉ์ด ์ฝ์ ๋๊ณ ์ ๊ฑฐ๋๋ ํญ๋ชฉ์ ์ ํ ์ปฌ๋ ์ ์ ๋๋ค. ํ๋ "์ ์ ์ ์ถ" ์์น, ์ฆ ๊ฐ์ฅ ๋จผ์ ์ฝ์ ๋ ํญ๋ชฉ์ด ๊ฐ์ฅ ๋จผ์ ์ ๊ฑฐ๋๋ ์์น์ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ FIFO ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ผ๊ณ ๋ ํฉ๋๋ค.
์๋ฃ๊ตฌ์กฐ์ ๋ํ ์ฃผ์ 2๊ฐ ํ & ์คํ, ํ ์ด๋ค
ํ(Queue) ๋ '์ ์ ์ ์ถ' (First In First Out, FIFO) ์์น์ ๋ฐ๋ฅด๋ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค.
์ฆ, ๊ฐ์ฅ ๋จผ์ ๋ค์ด๊ฐ(์ ์ ) ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ๋จผ์ ๋์ค๊ฒ(์ ์ถ) ๋ฉ๋๋ค. ์ด๋ ์ค์ํ์์ ์ฌ๋๋ค์ด ์ค์ ์์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ๊ณผ ๊ฐ์ ์๋ฆฌ์ ๋๋ค.
1. Enqueue: ํ์ ๋ค์ชฝ์ ํญ๋ชฉ์ ์ถ๊ฐํฉ๋๋ค.
2. Dequeue: ํ์ ์์ชฝ์์ ํญ๋ชฉ์ ์ ๊ฑฐํ๊ณ ๊ทธ ํญ๋ชฉ์ ๋ฐํํฉ๋๋ค.
In Python
Python์์๋ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
๋ฆฌ์คํธ์ append() ๋ฉ์๋๋ฅด ์ฌ์ฉํ์ฌ enqueue ์ฐ์ฐ์ ๊ตฌํํ๊ณ ,
pop() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ dequeue ์ฐ์ฐ์ ๊ตฌํํ ์ ์์ต๋๋ค.
class Queue:
def __init__(self):
self.queue = []
# ํ์ ์์ ์ถ๊ฐ (enqueue)
def enqueue(self, data):
self.queue.append(data)
# ํ์ ๋งจ ์ ์์ ์ ๊ฑฐ ๋ฐ ๋ฐํ (dequeue)
def dequeue(self):
if self.is_empty():
return None
else:
return self.queue.pop(0)
# ํ๊ฐ ๋น์ด์๋์ง ํ์ธ
def is_empty(self):
return len(self.queue) == 0
์์ ์ ์ํ Queue ํด๋์ค๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ํด ๋ณด์
q = Queue()
q.enqueue(1) # 1์ ํ์ ์ถ๊ฐ
q.enqueue(2) # 2๋ฅผ ํ์ ์ถ๊ฐ
q.enqueue(3) # 3์ ํ์ ์ถ๊ฐ
print(q.dequeue()) # 1์ ๋ฐํํ๊ณ ํ์์ ์ ๊ฑฐ
print(q.dequeue()) # 2๋ฅผ ๋ฐํํ๊ณ ํ์์ ์ ๊ฑฐ
print(q.dequeue()) # 3์ ๋ฐํํ๊ณ ํ์์ ์ ๊ฑฐ
์ ์ฝ๋์์๋ 1,2,3 ์์๋๋ก ํ์ ์ถ๊ฐ(enqueue)ํ๊ณ , ์ดํ ์ธ ๋ฒ dequeue ์ฐ์ฐ์ ์ํํ์ฌ 1,2,3 ์์๋๋ก ๋ฐ์ดํฐ๊ฐ ๋ฐํ๋๊ณ ํ์์ ์ ๊ฑฐ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฝํ & ์๊ณ ๋ฆฌ์ฆ
๋๋น ์ฐ์ ํ์ (BFS)์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
from collections import deque
def bfs(graph, root):
visited = []
queue = deque([root])
while queue:
vertex = queue.popleft()
if vertex not in visited:
visited.append(vertex)
queue.extend(graph[vertex] - set(visited))
return visited
graph = {'A': {'B', 'C'}, 'B': {'A', 'D', 'E'}, 'C': {'A', 'F'}, 'D': {'B'}, 'E': {'B', 'F'}, 'F': {'C', 'E'}}
print(bfs(graph, 'A')) # A์์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋
ธ๋๋ถํฐ ์์๋๋ก ์ถ๋ ฅ
์ด์ธ์๋, ํ๋ ๋ค์ํ ์ฝ๋ฉ ํ ์คํธ ๋ฌธ์ ์์ ํ์ฉ๋ ์ ์์ต๋๋ค.
1. ํ์ ๋ฌธ์ : ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฌธ์ ๋ฑ์์ ํ๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
2. ์๋ฌผ๋ ์ด์ ๋ฌธ์ : ์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๊ณ ์ฒ๋ฆฌ๋๋ ์์คํ ์ ์๋ฎฌ๋ ์ด์ ํ๋ ๋ฌธ์ ์์ ํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
3. ์ค์ผ์ฅด๋ง ๋ฌธ์ : ํน์ ํ ์ฐ์ ์์์ ๋ฐ๋ผ ์์ ์ ์ฒ๋ฆฌํด์ผ ํ๋ ๋ฌธ์ ์์ ์ฐ์ ์์ ํ๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.