// education

12. 그래프 탐색 - 깊이 우선 탐색(DFS), 너비 우선 탐색(BFS) 및 미로 최단 거리

비선형 자료구조인 그래프의 모든 노드를 빠짐없이 방문하는 **깊이 우선 탐색(DFS)**과 **너비 우선 탐색(BFS)**의 알고리즘 매커니즘을 다룹니다.


4. 실전 파이썬(Python 3) 알고리즘 구현 코드 및 라인별 주석 해설

본 레슨의 핵심 연산 매커니즘을 파이썬 3 환경에서 가장 효율적이고 직관적으로 구현한 실전 소스 코드입니다. 모든 주요 라인마다 상세한 한글 주석이 기재되어 있어 코드의 흐름을 쉽고 명확하게 이해할 수 있습니다.

from collections import deque

def bfs_maze(maze: list, start: tuple, target: tuple) -> int:
    """BFS(너비 우선 탐색)를 이용한 미로 최단 거리 탐색"""
    rows, cols = len(maze), len(maze[0])
    # 큐 생성: (행, 열, 이동거리)
    queue = deque([(start[0], start[1], 1)])
    
    # 방문 처리 배열 초기화
    visited = [[False] * cols for _ in range(rows)]
    visited[start[0]][start[1]] = True
    
    # 상, 하, 좌, 우 이동 변위 벡터
    dr = [-1, 1, 0, 0]
    dc = [0, 0, -1, 1]
    
    while queue:
        r, c, dist = queue.popleft()  # O(1) 선형 큐 pop
        
        # 목적지 도달 시 최단 거리 즉시 반환
        if (r, c) == target:
            return dist
        
        # 4방향 인접 미로 칸 탐색
        for i in range(4):
            nr, nc = r + dr[i], c + dc[i]
            # 미로 경계 내부이고, 미방문 상태이며, 이동 가능한 길(1)인 경우
            if 0 <= nr < rows and 0 <= nc < cols and not visited[nr][nc] and maze[nr][nc] == 1:
                visited[nr][nc] = True  # 방문 처리
                queue.append((nr, nc, dist + 1))  # 큐에 다음 좌표 삽입
    return -1  # 도달 불가능 시 -1 반환

if __name__ == "__main__":
    grid = [
        [1, 0, 1, 1, 1],
        [1, 0, 1, 0, 1],
        [1, 1, 1, 0, 1],
        [0, 0, 0, 0, 1]
    ]
    print("미로 최단 이동 거리:", bfs_maze(grid, (0, 0), (3, 4)))

파이썬 소스 코드 핵심 포인트 해설

  1. deque.popleft(): BFS 구현 시 파이썬 선형 큐 $O(1)$ 추출을 보장하는 핵심 구문 주석 해설입니다.

5. 알고리즘 설계 및 최적화 실무 지침 (Best Practices & Complexity Audit)

12. 그래프 탐색 - 깊이 우선 탐색(DFS), 너비 우선 탐색(BFS) 및 미로 최단 거리 레슨에서 익힌 핵심 알고리즘 메커니즘을 코딩 테스트 및 대규모 웹/서버 엔지니어링 환경에 도입할 때 반드시 체크해야 하는 튜닝 가이드입니다.

1) 공간/시간 복잡도 한계 및 메모리 사용 제어

2) 예외 케이스(Edge Cases) 및 코딩 테스트 체크리스트

  1. 입력 경계값 검증: $N=1$ 이거나 $N=0$ 인 극단적 최소 입력, 혹은 모든 요소의 값이 동일한 경우(Corner Case)에 대한 예외 처리를 누락하지 않습니다.
  2. 무한 루프 및 사이클 감지: 그래프/트리 탐색 시 방문 처리 배열(visited[])의 업데이트 위치를 정확히 지정하여 중복 큐 삽입으로 인한 메모리 초과를 예방합니다.

6. 핵심 요약 및 실무 FAQ (Summary & Q&A)

Q1. 파이썬 코드 주석에서 강조된 성능 핵심은 무엇인가요?

Q2. 실무 개발에서 본 파이썬 알고리즘 패턴은 어디에 활용되나요?

← 이전11. 백트래킹(Backtracking)과 상태 공간 트리 - 가지치기(Pruning), N-Queen 문제 및 스도쿠 다음 →13. 단일 출발지 최단 경로 알고리즘 - 다익스트라(Dijkstra)와 벨만-포드(Bellman-Ford)