아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

풀 뜯어 먹기

면접 대비

시간 제한1초메모리 제한256 MB

요약
소가 목초지 격자에서 바위를 피해 헛간까지 가는 최단 경로를 찾고, 그 경로에서 뜯어 먹는 풀 칸의 수를 구한다.
난이도

보통10점 중 5점

유형
BFS, 그래프, 행렬, 최단 경로
정답자
아직 제출이 없습니다

문제

소 베시는 풀을 무척 좋아하고, 저녁 착유 시간에 맞춰 외양간으로 서둘러 가고 싶어 합니다. 목초지는 RR개의 행(1≤R≤1001 \le R \le 100)과 CC개의 열(1≤C≤1001 \le C \le 100)로 이루어진 직사각형 격자입니다. 각 칸은 풀밭이거나 바위입니다. 베시는 바위를 먹을 수 없고, 바위 칸에는 들어가지도 않습니다.

베시는 자신이 있는 칸(소를 뜻하는 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개의 칸을 뜯어 먹습니다.

지도가 주어질 때, 베시가 외양간까지 가는 가장 짧은 경로에서 뜯어 먹는 풀 칸의 개수를 구하세요.

입력

  • 첫째 줄: 공백으로 구분된 두 정수 RR과 CC.
  • 둘째 줄부터 R+1R+1번째 줄까지: i+1i+1번째 줄에는 ii행을 나타내는 CC개의 문자가 공백 없이 주어집니다. 외양간은 B, 베시는 C, 풀은 ., 바위는 *로 표시됩니다.

출력

  • 베시가 외양간으로 돌아가는 가장 짧은 경로에서 뜯어 먹는 풀 칸의 개수를 나타내는 정수 하나.

예제4

  1. 예제 1

    입력
    5 6
    B...*.
    ..*...
    .**.*.
    ..***.
    *..*.C
    
    예상 출력
    9
    
  2. 예제 2

    입력
    1 2
    BC
    
    예상 출력
    1
    
  3. 예제 3

    입력
    2 1
    B
    C
    
    예상 출력
    1
    
  4. 예제 4

    입력
    1 5
    B...C
    
    예상 출력
    4