강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

석국수님의 프로필 이미지
석국수

작성한 질문수

세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)

그래프 순회 (DFS & BFS) [개념]

BFS, DFS

작성

·

10

0

 

  • 어느 파트인지
    섹션 5 - 그래프 순회 (DFS & BFS)

  • 내가 이해한 내용
    DFS와 BFS 모두 모든 노드를 탐색하고, 시간 복잡도도 같다고 이해했습니다.

  • 궁금한 점
    DFS로만 풀리고 BFS로 안풀리는 문제도 있나요?
    BFS로 DFS문제가 다 풀리면, 왜 강사님은 DFS로 먼저 접근하시는건가요?

     

답변 2

0

알리 Ally님의 프로필 이미지
알리 Ally
지식공유자

안녕하세요, 석국수님!

대부분의 경우 DFS로 풀 수 있는 문제는 BFS로도 풀 수 있습니다. 하지만 일반적인 그래프 탐색 문제에서는 DFS가 다음과 같은 이유로 더 선호됩니다.

 

DFS는 그래프 탐색의 가장 기본적인 구조
DFS는 “그래프를 탐색한다”는 목적을 가장 직관적으로 드러내는 알고리즘입니다. DFS로 충분히 풀리는 문제를 굳이 BFS로 구현한다면, 코드를 읽는 입장에서 “최단 거리가 중요한 상황도 아닌데 왜 BFS를 썼지?”라는 의문을 가질 수 있습니다. 따라서 특별한 이유가 없다면 기본적인 탐색은 DFS로 구현하는 것이 자연스럽습니다.

 

BFS 대비 DFS의 메모리 효율성
시간 복잡도는 DFS와 BFS 모두 O(V+E)로 동일합니다. 그러나 메모리 측면에서는 DFS가 더 유리한 경향이 있습니다. DFS는 다음 노드를 바로 탐색하는 반면, BFS는 다음 노드들을 모드 큐에 담아 놓아야 하기 때문에 메모리 사용량에서 불리한 경우가 많습니다.

 

응용 문제로의 확장성
그래프 탐색을 응용하는 다양한 문제들은 대부분 DFS 변형으로 해결됩니다. 대표적으로 백트래킹 알고리즘이 이에 해당합니다. BFS로도 구현은 가능하지만, 탐색 경로를 전부 큐에 넣어야 하므로 경우에 따라 DFS보다 훨씬 많은 메모리를 소모할 수 있습니다.

 

따라서, 특별한 제약이 없다면 그래프 탐색은 DFS로 접근하는 것이 일반적입니다. 반대로 가까운 거리부터 탐색해야 하는 문제(예: 최단 거리, 최소 단계 탐색)라면 BFS가 적합합니다.

문제를 DFS와 BFS 두 가지 방식으로 모두 구현해보고 장단점을 비교하다 보면, 어느 순간 자신만의 선택 기준이 생길 것입니다. :)

 

추가로 궁금한 사항이 있으면 언제든 편하게 질문 남겨주세요 🙂

0

안녕하세요, 인프런 AI 인턴입니다.

석국수님의 질문에 대한 답변을 드립니다. DFS(깊이 우선 탐색)와 BFS(너비 우선 탐색)는 모두 그래프의 모든 노드를 탐색하는 알고리즘으로, 시간 복잡도 측면에서 유사하지만, 사용하는 방법과 적용되는 문제의 유형에 따라 적절하게 선택됩니다.

  1. DFS로만 풀 수 있는 문제: 일반적으로 DFS는 백트래킹 문제나 순열 생성 문제에서 유용하게 사용됩니다. 이러한 문제들은 특정 경로를 따라 깊게 탐색하고, 해결책을 찾지 못하면 돌아와서 다른 경로를 탐색해야 하는 특성이 있습니다. DFS는 이러한 경우에 적합하며, BFS는 이러한 경로 기반 문제 해결 과정에서 비효율적일 수 있습니다.

  2. BFS로만 풀 수 있는 문제: BFS는 최단 경로 문제를 해결할 때 주로 사용됩니다. 예를 들어, 그래프에서 두 노드 사이의 최단 경로를 찾는 문제에서는 BFS가 효과적입니다. DFS를 사용하면 모든 경로를 탐색해야 하므로, 최단 경로를 보장할 수 없을 수 있습니다.

  3. 강의에서 DFS로 접근하는 이유: 강사님께서 DFS로 먼저 접근하시는 이유는 문제의 유형과 해결 방식에 따라 DFS가 더 적합한 경우가 많기 때문입니다. DFS는 깊이 있는 탐색을 통해 재귀 호출로 문제를 해결하기 용이하여, 특정 유형의 문제에서 간결하고 직관적인 풀이가 가능합니다.

관련하여 유사한 질문과 답변을 찾았습니다:
- 그래프 탐색 DFS/BFS의 차이점

위 링크를 통해 DFS와 BFS의 차이점에 대해 더 깊게 이해하실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

석국수님의 프로필 이미지
석국수

작성한 질문수

질문하기