“벽 부수고 이동하기” 문제는 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_ebb4573dcc522cb.png)

![[Algorithm] C++/Python 백준 1605번 : Non-boring sequences](/post/algorithm/2025-01-28-boj-3408/index_hu_5d78746949a9c5b7.png)
![[Algorithm] C++ 백준 1005번 : ACM Craft](/post/algorithm/2024-05-18-boj-1005/tmp_wordcloud_hu_532f4f5be5c42e57.png)
![[Algorithm] C++ 백준 2206번 : 벽 부수고 이동하기](/post/algorithm/2024-05-18-boj-2206/tmp_wordcloud_hu_41f9d791972a8d1e.png)
![[Algorithm] C++ 백준 2252번 : 줄 세우기](/post/algorithm/2024-05-18-boj-2252/tmp_wordcloud_hu_e1362fc01c64eb3d.png)
![[Algorithm] C++ 백준 1027번 : 이동](/post/algorithm/2024-05-15-boj-1067/tmp_wordcloud_hu_340e4da19076ec95.png)
![[Algorithm] C++ 백준 2988번: 아보가드로](/post/algorithm/2025-12-19-boj-2988-avogadro-cpp-solution/wordcloud_hu_f8c8ed89136241ec.png)
![[Algorithm] C++ 백준 16746번: Four-Coloring](/post/algorithm/2025-12-04-boj-16746-four-coloring-cpp-solution/wordcloud_hu_558ca35c9d91c37.png)
![[Algorithm] C++ 백준 1031번: 스타 대결](/post/algorithm/2025-10-14-boj-1031-star-battle-cpp-solution/wordcloud_hu_c257def50b76bed0.png)
![[Algorithm] C++/Python 백준 16993번: 연속합과 쿼리 (세그먼트 트리)](/post/algorithm/2025-09-16-boj-16993-maximum-subarray-queries-segment-tree-cpp-python-solution/wordcloud_hu_a7b6092fd0960f53.png)
![[Algorithm] C++ 백준 18186번: 라면 사기 (Large)](/post/algorithm/2025-09-04-boj-18186-ramen-buying-large-greedy-cpp-solution/wordcloud_hu_e6abc00c7265cff.png)