풀 뜯어 먹기
면접 대비시간 제한1초메모리 제한256 MB
소가 목초지 격자에서 바위를 피해 헛간까지 가는 최단 경로를 찾고, 그 경로에서 뜯어 먹는 풀 칸의 수를 구한다.
문제
소 베시는 풀을 무척 좋아하고, 저녁 착유 시간에 맞춰 외양간으로 서둘러 가고 싶어 합니다. 목초지는 개의 행()과 개의 열()로 이루어진 직사각형 격자입니다. 각 칸은 풀밭이거나 바위입니다. 베시는 바위를 먹을 수 없고, 바위 칸에는 들어가지도 않습니다.
베시는 자신이 있는 칸(소를 뜻하는 C로 표시)에서 출발해, 1행 1열에 있는 외양간(B로 표시)까지 가장 짧은 경로로 가려고 합니다. 한 번에 상하좌우로 인접한 (최대 네 개의) 칸 중 하나로 이동할 수 있습니다.
가장 짧은 경로를 따라 걸으면서 베시는 지나가는 모든 칸의 풀을 뜯어 먹습니다. 외양간 칸에는 풀이 없으므로 그 칸에서는 먹지 않지만, 출발 칸의 풀은 먹습니다.
아래 그림은 지도(바위 *, 풀 ., 외양간 B, 5행 6열에 있는 베시 C)와, 그 지도에서 최적 경로를 뜯어 먹은 자국(m)으로 표시한 것을 나란히 보여 줍니다.
Map Optimal Munched Route
1 2 3 4 5 6 <-col 1 2 3 4 5 6 <-col
1 B . . . * . 1 B m m m * .
2 . . * . . . 2 . . * m m m
3 . * * . * . 3 . * * . * m
4 . . * * * . 4 . . * * * m
5 * . . * . C 5 * . . * . m
이 경로에서 베시는 9개의 칸을 뜯어 먹습니다.
지도가 주어질 때, 베시가 외양간까지 가는 가장 짧은 경로에서 뜯어 먹는 풀 칸의 개수를 구하세요.
입력
- 첫째 줄: 공백으로 구분된 두 정수 과 .
- 둘째 줄부터 번째 줄까지: 번째 줄에는 행을 나타내는 개의 문자가 공백 없이 주어집니다. 외양간은
B, 베시는C, 풀은., 바위는*로 표시됩니다.
출력
- 베시가 외양간으로 돌아가는 가장 짧은 경로에서 뜯어 먹는 풀 칸의 개수를 나타내는 정수 하나.