그래프 완전 탐색 기법 중 하나
시작 노드에서 출발하여 탐색할 한 쪽 분기 정해서 최대 깊이까지 탐색을 마친 후 다른 쪽 분기로 이동하여 다시 탐색을 수행하는 알고리즘
재귀 함수로 구현 = 스택 자료 구조(FIFO)이용 ⇒ 먼저 들어온 data가 나중에 나감 = 이게 재귀랑 로직이 같음
재귀 함수 이용하므로 stack overflow에 유의하긔
핵심 이론
⇒ 즉, 스택에 노드를 삽입할 때 방문 배열을 체크하고 스택에서 노드를 뺄 때 탐색 순서에 기록하며 인접 노드를 방문 배열과 대조하며 살펴봄
023 연결 요소 개수 구하기
024 신기한 소수 찾기
025 친구관계 파악하기
그래프를 완전 탐색하는 방법 중 하나
시작 노드에서 가까운 노드부터 탐색하는 방식
Queue (FIFO) 구조 사용
DFS와 달리 깊게 들어가지 않고 같은 레벨의 노드부터 탐색
방문 순서가 계층적 (Level Order) 으로 진행됨
최단 거리 탐색 문제에 유용
DFS는 재귀/스택, BFS는 큐 사용
동작 흐름
026 DFS와 BFS 프로그램
DFS (Depth-First Search)
DFS(현재 노드) {
방문 처리
인접 노드들 중 방문 안 한 노드 → 재귀 호출
}
BFS (Breadth-First Search)
BFS(시작 노드) {
큐에 넣고 방문 처리
큐가 빌 때까지 반복:
- 큐에서 꺼낸 노드의 인접 노드들 중 방문 안 한 노드 → 큐에 넣기
}
027 미로 탐색하기
BFS (너비 우선 탐색) 사용하여 최단 거리 구하기
왜? → DFS는 모든 경로를 탐색하므로 비효율적이고
BFS는 한 칸씩 레벨 탐색 → 최단 경로에 적합
028 트리의 지름 구하기
이유: 트리에서 가장 먼 두 노드는 반드시 리프 노드끼리이며 한 번의 BFS로 루트에서 가장 먼 노드를 찾고 그 노드에서 다시 가장 먼 노드까지의 거리로 지름을 구할 수 있음
중앙값 인덱스 mid 계산
mid = (start + end) / 2
target과 mid 값 비교
범위 내 반복 수행
값이 없으면 종료