link : https://www.acmicpc.net/problem/2206
벽 부수고 이동하기 성공
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
2 초 | 128 MB | 9038 | 2328 | 1443 | 24.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 |