본문 바로가기

Programming/BOJ Solutions

[백준 2206번] 벽 부수고 이동하기

시간 제한메모리 제한제출정답맞은 사람정답 비율
2 초128 MB90382328144324.207%

문제

N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이 때 최단 경로로 이동하려 한다. 최단경로는 맵에서 가장 적은 개수의 칸을 지나는 경로를 말하는데, 이 때 시작하는 칸과 끝나는 칸도 포함해서 센다.

만약에 이동하는 도중에 한 개의 벽을 부수고 이동하는 것이 좀 더 경로가 짧아진다면, 벽을 한 개 까지 부수고 이동하여도 된다.

맵이 주어졌을 때, 최단 경로를 구해 내는 프로그램을 작성하시오.

입력

첫째 줄에 N(1≤N≤1,000), M(1≤M≤1,000)이 주어진다. 다음 N개의 줄에 M개의 숫자로 맵이 주어진다. (1, 1)과 (N, M)은 항상 0이라고 가정하자.

출력

첫째 줄에 최단 거리를 출력한다. 불가능할 때는 -1을 출력한다.

예제 입력 1 

6 4
0100
1110
1000
0000
0111
0000

예제 출력 1 

15


BFS 문제이다. 최단 거리를 구하는 것이므로 조건에 맞게 때려박기만 하면된다.


숫자를 하나씩 받아서 바로 배열에 넣기 위해 cin.get()을 사용했다.

'Programming > BOJ Solutions' 카테고리의 다른 글

[백준 2339번] 석판 자르기  (0) 2018.06.20
[백준 2309번] 일곱 난쟁이  (0) 2018.06.20
[백준 1987번] 알파벳  (0) 2018.06.20
[백준 1938번] 통나무 옮기기  (0) 2018.06.20
[백준 1697번] 숨바꼭질  (0) 2018.06.20