탐색(Search)는 '많은 양의 데이터 중에서 원하는 데이터를 찾는 과정'
탐색의 대표 알고리즘은 DFS/BFS.
두 알고리즘을 제대로 이해하려면 기본 자료구조 스택, 큐에 대한 이해가 전제되어야한다!
stack=[]
# 삽입(5)-삽입(2)-삽입(3)-삽입(7)-삭제()-삽입(1)-삽입(4)-삭제()
stack.append(5)
stack.append(2)
stack.append(3)
stack.append(7)
stack.pop()
stack.append(1)
stack.append(4)
stack.pop()
print(stack) #최하단 원소부터 출력: [5,2,3,1]
print(stack[::-1] #최상단 원소부터 출력: [1,3,2,5]
from collections import deque
queue = deque()
# 삽입(5)-삽입(2)-삽입(3)-삽입(7)-삭제()-삽입(1)-삽입(4)-삭제()
queue.append(5)
queue.append(2)
queue.append(3)
queue.append(7)
queue.popleft()
queue.append(1)
queue.append(4)
queue.popleft()
print(queue) #먼저 들어온 순서대로 출력: deque([3,7,1,4])
queue.reverse()
print(queue) #나중에 들어온 순서대로 출력: deque([4,1,7,3])
# (ex) 팩토리얼 구현
def factorial_recursive(n):
if n<=1:
return 1
return n*factorial_recursive(n-1)

INF = 999999999 #무한의 값으로 초기화
graph = [
[0,7,5],
[7,0,INF],
[5,INF,0]
]
print(grapgh) #[[0,5,6],[7,0,999999999],[5,999999999,0]]

#행(Row)가 3개인 2차원 리스트로 인접 리스트 표현
graph = [[] for _ in range(3)]
#노드 0에 연결된 노드 정보 저장(노드,거리)
graph[0].append((1,7))
graph[0].append((2,5))
#노드 1에 연결된 노드 정보 저장(노드,거리)
graph[1].append((0,7))
#노드 2에 연결된 노드 정보 저장(노드,거리)
graph[2].append((0,5))
print(grapgh) #[[(1,7),(2,5)],[(0,7)],[(0,5)]]