DFS/BFS 의 차이

코딩테스트 공부

목록 보기
7/10

✅ 먼저 비유부터!

🎯 상황: 당신은 미로 탐험가입니다!

  • DFS:
    → “쭉쭉 들어가! 갈 수 있을 때까지 한 방향으로 끝까지 가!”
    → 막다른 길이면 돌아가서 다른 길을 찾아봐.

  • BFS:
    → “일단 한 칸씩 다 살펴보고, 다음 레벨로 넘어가.”
    → 갈 수 있는 길은 넓게 펼쳐서 먼저 다 본 다음에, 그 다음 단계로 넘어가.


✅ 간단한 그래프 예제

아래와 같은 연결 구조가 있다고 해봅시다:

A
├── B
│   ├── D
│   └── E
└── C
    └── F

이걸 파이썬 딕셔너리로 표현하면:

graph = {
    'A': ['B', 'C'],
    'B': ['D', 'E'],
    'C': ['F'],
    'D': [],
    'E': [],
    'F': []
}

원리:

  • 스택처럼, 가장 최근에 넣은 노드부터 꺼내서 탐색
  • 가능한 한 깊숙이 들어간다

동작 순서:

1. A 방문 → [A]
2. B 방문 → [A, B]
3. D 방문 → [A, B, D] (D는 끝)
4. E 방문 → [A, B, D, E] (E도 끝)
5. C 방문 → [A, B, D, E, C]
6. F 방문 → [A, B, D, E, C, F]

결과:

DFS 방문 순서 → A → B → D → E → C → F

원리:

  • 큐처럼, 가장 먼저 넣은 노드부터 꺼내서 탐색
  • 넓게 퍼지듯이 한 단계씩 탐색

동작 순서:

1. A 방문 → [A]
2. B, C 방문 → [A, B, C]
3. D, E (B의 자식) 방문 → [A, B, C, D, E]
4. F (C의 자식) 방문 → [A, B, C, D, E, F]

결과:

BFS 방문 순서 → A → B → C → D → E → F

✅ 시각적 차이 요약

구분DFS (깊이 우선)BFS (너비 우선)
구조스택
순서깊이 우선레벨(깊이) 우선
속도목표가 깊은 곳에 있으면 빠름목표가 가까운 곳에 있으면 빠름
구현재귀 or 스택

🔚 결론적으로

  • DFS는 "끝까지 파고들기"
  • BFS는 "옆으로 다 살피기"
  • DFS: stack, BFS: queue
  • 코드 흐름과 함께 머릿속에 "탐험 방식"을 상상하면 이해가 쉬워요!

필요하다면 시각적으로 애니메이션처럼 흐름을 그림으로 보여드릴 수도 있어요.
원하시면 시각 자료도 만들어 드릴게요! 😊
계속 이어서 연습해볼까요?

profile
AI 답변 글을 주로 올립니다.

0개의 댓글