먼저 들어간 데이터가 나중에 나오는 자료구조이다.(LIFO)
DFS 알고리즘에 사용된다.
먼저 들어간 데이터가 먼저 나오는 자료구조이다.(FIFO)
BFS 알고리즘에 사용된다.
파이썬에서는 큐를 구현하기 위해 deque 라이브러리를 사용한다.
from collections import deque
q = deque()
# 삽입
q.append(1)
# 삭제
q.popleft()
def dfs(graph, v, visited):
# 현재 노드는 방문으로 처리
visited[v] = True
print(v, end=' ')
# 현재 노드와 연결된 다른 노드를 재귀적으로 방문한다.
for i in graph[v]:
if not visited[i]:
dfs(graph, i, visited)
graph = [
[],
[2, 3, 8],
[1, 7],
[1, 4, 5],
[3, 5],
[3, 4],
[7],
[2, 6, 8],
[1, 7]
]
# 각 노드의 방문정보 저장
visited = [False] * 9
dfs(graph, 1, visited)
from collections import deque
def bfs(graph, start, visited):
queue = deque([start])
# 현재 노드를 방문 처리
visited[start] = True
while queue:
v = queue.popleft()
print(v, end=" ")
# 해당 원소와 연결되어 있고 아직 방문하지 않은 원소라면 큐에 삽입
for i in graph[v]:
if not visited[i]:
queue.append(i)
visited[i] = True
graph = [
[],
[2, 3, 8],
[1, 7],
[1, 4, 5],
[3, 5],
[3, 4],
[7],
[2, 6, 8],
[1, 7]
]
visited = [False] * 9
bfs(graph, 1, visited)
그림 폰트 출처: 제주특별자치도, 제주서체, https://www.jeju.go.kr/jeju/symbol/font/infor.htm
참고 서적: 이것이 취업을 위한 코딩 테스트다 with 파이썬, 나동빈, 한빛미디어
참고 강의: 나동빈님 유튜브 강의