선입후출 형식
컵에 원소를 한줄로 채워넣는 것으로 이해하면 쉽다.
stack = []
stack.append()
stack.pop() : 마지막에 추가한 원소를 제거하면서 동시에 return함.
선입선출 형식
입구와 출구가 뚫려있는 원통으로 이해하면 쉽다.
from collections import deque
queue = deque()
queue.append()
queue.popleft()
자기 자신을 다시 호출하는 함수
def gcd(a,b):
if a%b == 0 :
return b
else :
return gcd(b, a%b)
"어떤 순서대로 데이터를 탐색할 것인가?"
# 각 노드가 연결된 정보 (2차원 리스트)
graph = [
[], #빈 노드
[2, 3, 8], # 1번 노드는 2,3,8번 노드에 연결됨
[1, 7],
[1, 4, 5],
[3, 5],
[3, 4],
[7],
[2, 6, 8],
[1, 7]
]
# 방문 정보
visited = [False] * 9
# DFS 메서드 정의
def dfs(graph, v, visited) :
visited[v] = True # 현재 노드를 방문 처리
print(v, end=' ')
for i in graph[v] :
if not visited[i]:
dfs(graph, i, vistied)
출력 결과 : 1 2 7 6 8 3 4 5
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
bfs(graph, 1, visited)
출력 결과 : 1 2 3 8 7 4 5 6
DFS
BFS