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

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

레이저 통신

면접 대비

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

요약
벽과 두 개의 C 칸이 있는 격자에서 한 C에서 발사한 레이저가 다른 C에 도달하도록 놓아야 하는 거울(/ 또는 \)의 최소 개수를 구한다.
난이도

보통10점 중 6점

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

문제

크기가 1×11 \times 1인 정사각형 칸으로 이루어진 W×HW \times H 크기의 지도가 있다. 각 칸은 빈 칸이거나 벽이며, 그중 두 칸은 문자 C로 표시되어 있다.

C로 표시된 두 칸을 레이저로 연결하려고 한다. 레이저는 C에서 상·하·좌·우 중 한 방향으로 발사되며, 빈 칸에 거울 / 또는 \를 설치하면 그 칸에서 레이저의 진행 방향을 90도 꺾을 수 있다. 벽이 있는 칸으로는 레이저가 지나갈 수 없다.

두 C를 레이저로 연결하기 위해 설치해야 하는 거울 개수의 최솟값을 구하는 프로그램을 작성하시오.

아래 그림은 H=8H = 8, W=7W = 7인 예시로, 빈 칸은 ., 벽은 *로 나타냈다. 왼쪽은 초기 상태이고, 오른쪽은 거울을 최소 개수만큼 사용하여 두 C를 연결한 모습이다.

7 . . . . . . .         7 . . . . . . .
6 . . . . . . C         6 . . . . . /-C
5 . . . . . . *         5 . . . . . | *
4 * * * * * . *         4 * * * * * | *
3 . . . . * . .         3 . . . . * | .
2 . . . . * . .         2 . . . . * | .
1 . C . . * . .         1 . C . . * | .
0 . . . . . . .         0 . \-------/ .
  0 1 2 3 4 5 6           0 1 2 3 4 5 6

입력

첫째 줄에 지도의 가로 크기 WW와 세로 크기 HH가 주어진다. (1≤W,H≤1001 \le W, H \le 100)

둘째 줄부터 HH개의 줄에 걸쳐 지도가 주어지며, 각 줄은 WW개의 문자로 이루어진다. 각 문자의 의미는 다음과 같다.

  • .: 빈 칸
  • *: 벽
  • C: 레이저로 연결해야 하는 칸

C는 항상 정확히 두 개이며, 두 칸을 레이저로 연결할 수 있는 입력만 주어진다.

출력

두 C를 연결하기 위해 설치해야 하는 거울 개수의 최솟값을 첫째 줄에 출력한다.

예제3

  1. 예제 1

    입력
    7 8
    .......
    ......C
    ......*
    *****.*
    ....*..
    ....*..
    .C..*..
    .......
    
    예상 출력
    3
    
  2. 예제 2

    입력
    2 1
    CC
    
    예상 출력
    0
    
  3. 예제 3

    입력
    3 3
    C..
    ...
    ..C
    
    예상 출력
    1