“벽 부수고 이동하기” 문제는 N×M 크기의 2차원 배열로 주어진 맵에서 (1,1)에서 (N,M)까지 이동하는 최단 경로를 찾는 것이다. 이동은 상하좌우로 가능하며, 벽(1)을 최대 한 개까지 부술 수 있다. BFS를 활용하여 벽을 부순 상태와 부수지 않은 상태를 구분하여 최단 경로를 탐색하는 문제이다. 이동할 수 없는 경우 -1을 출력한다.
![]() |
|---|
| 이미지로 형상화 |
문제 이해
- 맵의 크기: NxM의 2차원 배열로 구성되며, 각 위치는 이동 가능(0) 또는 벽(1)으로 표시된다.
- 목적지: (1,1)에서 (N,M)까지의 최단 경로를 찾는 것.
- 특징: 벽을 최대 한 개까지 부술 수 있다.
접근 방법
- **BFS (너비 우선 탐색)**를 이용하여 최단 경로를 탐색한다.
- 방문 상태 관리: 벽을 부순 상태와 부수지 않은 상태를 구분하여 3차원 배열로 방문 여부를 기록한다.
단계별 풀이
- 입력 처리: N, M과 맵 정보를 입력받는다.
- 자료 구조 초기화:
visited배열:visited[x][y][0]은 벽을 부수지 않고 (x, y)에 도착한 상태를,visited[x][y][1]은 벽을 부수고 (x, y)에 도착한 상태를 기록한다.queue: BFS 탐색을 위한 큐, 초기값은 시작점 (0, 0, 0) (벽을 부수지 않은 상태).
- BFS 탐색:
- 큐에서 현재 위치를 꺼내서 상하좌우로 이동할 수 있는 모든 경우를 확인한다.
- 이동 가능한 경우를 확인하여 방문하지 않은 위치를 큐에 추가한다.
- 벽을 부수는 경우, 아직 벽을 부수지 않았을 때만 벽을 부수고 이동할 수 있다.
- 결과 반환:
- 목적지에 도달하면 해당 위치의 방문 횟수를 반환한다.
- 모든 경로를 탐색해도 목적지에 도달하지 못하면 -1을 반환한다.
예제 코드
| |
위의 코드와 같이 BFS 알고리즘을 활용하여 문제를 해결할 수 있다. 주요 포인트는 벽을 부순 상태와 그렇지 않은 상태를 명확하게 구분하여 각각의 상태를 관리하는 것이다. 이를 통해 최단 경로를 정확하게 찾아낼 수 있다.
![Featured image of post [Algorithm] C++ 백준 2206번 : 벽 부수고 이동하기](/post/algorithm/2024-05-18-boj-2206/tmp_wordcloud_hu_93637dcf7e669c75.png)

![[Algorithm] C++/Python 백준 1605번 : Non-boring sequences](/post/algorithm/2025-01-28-boj-3408/index_hu_2b15d3b1ba5e07d4.png)
![[Algorithm] C++ 백준 1005번 : ACM Craft](/post/algorithm/2024-05-18-boj-1005/tmp_wordcloud_hu_217baf21f3f8489a.png)
![[Algorithm] C++ 백준 2206번 : 벽 부수고 이동하기](/post/algorithm/2024-05-18-boj-2206/tmp_wordcloud_hu_2fb89462fc4873b9.png)
![[Algorithm] C++ 백준 2252번 : 줄 세우기](/post/algorithm/2024-05-18-boj-2252/tmp_wordcloud_hu_12fd9f6f9371b605.png)
![[Algorithm] C++ 백준 1027번 : 이동](/post/algorithm/2024-05-15-boj-1067/tmp_wordcloud_hu_d2763a2586832bca.png)
![[Algorithm] C++ 백준 1031번: 스타 대결](/post/algorithm/2025-10-14-boj-1031-star-battle-cpp-solution/wordcloud_hu_f77f5f84ec32b33a.png)
![[Algorithm] cpp-python 백준 16993번: 연속합과 쿼리 (세그먼트 트리)](/post/algorithm/2025-09-16-boj-16993-maximum-subarray-queries-segment-tree-cpp-python-solution/wordcloud_hu_789f7bcec4a582b7.png)
![[Algorithm] cpp 백준 18186번: 라면 사기 (Large)](/post/algorithm/2025-09-04-boj-18186-ramen-buying-large-greedy-cpp-solution/wordcloud_hu_2d2533b219761dcf.png)
![[Algorithm] cpp 백준 19955번: 침략전쟁 - BFS·DSU 시뮬레이션](/post/algorithm/2025-09-04-boj-19955-invasion-war-bfs-dsu-cpp-solution/wordcloud_hu_5a9b4c559e1d3221.png)
![[Algorithm] cpp 백준 1144번: 싼 비용 - Connection Profile DP](/post/algorithm/2025-08-14-boj-1144-cheap-cost-cpp-solution/wordcloud_hu_9411ee06c3fd5b1.png)