멋사 부트캠프/알고리즘

03. 깊이 우선 탐색(DFS)

cTosMaster 2025. 5. 15. 11:11

1. 알고리즘 정의

Depth-First Search

한 방향으로 최대한 깊게 탐색한 뒤, 더 이상 갈 곳이 없으면 백트래킹하면서 다른 경로를 탐색하는 알고리즘이야.

 

[구조]

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

BFS 탐색 순서 (시작: A)
→ A → B → D (재귀:백트래킹) → C

 

2. 알고리즘 구현

1) 재귀함수 활용

void dfs(int node, boolean[] visited) {
    visited[node] = true;
    System.out.print(node + " ");
    
    for (int next : graph[node]) {
        if (!visited[next]) {
            dfs(next, visited);
        }
    }
}

 

2) Stack 활용

void dfsStack(int start) {
    Stack<Integer> stack = new Stack<>();
    boolean[] visited = new boolean[n + 1];

    stack.push(start);

    while (!stack.isEmpty()) {
        int node = stack.pop();

        if (!visited[node]) {
            visited[node] = true;
            System.out.print(node + " ");

            for (int next : graph[node]) {
                if (!visited[next]) {
                    stack.push(next);
                }
            }
        }
    }
}

 

3. 활용 예시

🔍 미로 탐색 출구까지 가능한 경로 찾기
🧩 백트래킹 N-Queen, 스도쿠, 조합/순열 생성
🧱 연결 요소 탐색 그래프에서 서로 연결된 그룹 찾기
🕳️ 사이클 감지 순환 구조 있는지 검사
🌲 트리 탐색 후위순회(postorder) 등
🌐 웹 크롤링 링크 따라가며 깊게 탐색
🎮 게임 맵 탐색 DFS로 갈 수 있는 경로 탐색