2022 02 08
2022-02-08
알고리즘 문제풀이 - DFS, BFS 기초
- DFS
- 재귀를 통해서 풀 수 있어야함
- 상태 트리를 잘 생각해서 풀 것
- 필요하다면 static 변수등을 통해 전역에서 접근할 수 있는 곳에 상태를 기록해 둘 것
- 경우의 수를 구할 때 DFS를 생각할 것!
- 부분집합 구하기
- 경우의 수를 고려하여 상태 트리를 만들자
- 상태를 기록해두기 위해 static 배열/변수를 만들자
- BFS
- 큐를 통해서 풀 수 있어야 함
- 최단거리/최소횟수를 구할 때 BFS를 생각할 것!
- 트리의 레이어를 돌아가면서 최단 경로 구하기
- 이런거 레이어 별로 탐색하면서 Queue에서 빼서 뚝딱 체크
- 순회
- 전위 순회: 부모 -> 왼 -> 오
- 중위 순회: 왼 -> 부모 -> 오
- 후위 순회: 왼 -> 오 -> 부모
- DFS vs BFS
- DFS: 모든 경우의 수를 파악해야하는 경우
- BFS: 최단 거리, 최단 경우의 수
- 그래프와 인접 행렬
- 무방향 그래프

- (1-2), (1-3), (2-4), (3-4), (2-5)
- 인접 행렬에서는 (1-2) 경우 [1][2], [2][1] 에 1 넣어주기
- 인접 리스트에서 1->2, 2->1 뚝딱
- 방향 그래프

- (1-2), (1-3), (2-4), (3-4), (2-5)
- 인접 행렬에서는 (1-2) 경우 [1][2] 에 1 넣어주기
- 인접 리스트에서 1->2 뚝딱
- 가중치 그래프

- (1-2), (1-3), (2-4), (3-4), (2-5)
- 인접 행렬에서는 (1-2)의 경우 [1][2] 에 "2" 넣어주기
- 인접 리스트에서는 Node를 만들어서 value/가중치 넣어주기