만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

스케이트

면접 대비

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

요약
스케이터가 장애물에 부딪힐 때만 좌회전이나 우회전을 하면서 격자의 동쪽 가장자리로 나가는 데 필요한 최소 회전 수를 구합니다.
난이도

보통10점 중 5점

유형
BFS, 최단 경로, 시뮬레이션
정답자
아직 제출이 없습니다

문제

나탈리는 새 스케이트를 샀고, 동네 스케이트장에서 한번 타 보기로 했다. 스케이트장은 직사각형이고, 빙판 위에 장애물이 여러 개 놓여 있다. 나탈리는 스케이트장의 서쪽에 있고, 동쪽으로 건너가려 한다.

나탈리는 스케이트를 잘 타지 못한다. 입구로 빙판에 들어서면 장애물에 부딪히기 전까지는 방향을 바꿀 수 없다. 첫 번째 장애물에 부딪히면 왼쪽이나 오른쪽으로 돌고, 그 방향으로 계속 직진한다. 이후에도 같은 방식으로 진행한다. 나탈리는 장애물에 부딪힐 때마다 반드시 왼쪽 또는 오른쪽으로 90도 회전하며, 장애물에 부딪힌 경우에만 방향을 바꿀 수 있다.

나탈리는 이동을 최대한 단순하게 하고 싶어 한다. 오른쪽(동쪽)으로 빙판을 빠져나오기까지 필요한 회전 횟수의 최솟값은 얼마인가? 나탈리는 항상 왼쪽 위 칸으로 빙판에 들어가며, 처음에는 동쪽(오른쪽)으로 스케이트를 탄다.

첫 번째 줄에 정수 RR과 CC가 공백으로 구분되어 주어진다.

다음 RR개의 줄에는 각각 CC개의 문자가 주어지며, 각 문자는 스케이트장의 칸을 나타낸다. '.'은 빈 칸이고, '#'은 장애물이 있는 칸이다.

나탈리가 스케이트장의 오른쪽으로 빠져나오면 목표를 달성한다. 위, 아래, 왼쪽 중 다른 쪽으로 빠져나가면 실패한다. 나탈리는 항상 칸 (0,0)(0,0)에서 출발해 오른쪽으로 스케이트를 탄다.

출력

나탈리가 오른쪽 빙판 밖으로 나가기까지 필요한 최소 회전 횟수를 한 줄에 정수 하나로 출력한다. 해가 존재함은 보장된다.

제한

3≤R,C≤1003 \le R,C \le 100

힌트

세 번째 예제(Sample Input 3)에서 나탈리는 먼저 동쪽으로 첫 번째 장애물까지 스케이트를 탄다. 오른쪽으로 돌아 아래쪽으로 내려간다. 다시 오른쪽으로 돌아 서쪽으로 가고, 빙판의 동쪽 가장자리에 닿기 전까지 오른쪽으로 두 번 더 돈다. 총 네 번 회전하므로 답은 4이다.

예제3

  1. 예제 1

    입력
    6 10
    .........#
    ########.#
    #........#
    #.########
    #.........
    ##########
    
    예상 출력
    4
    
  2. 예제 2

    입력
    3 3
    ...
    ...
    ...
    
    예상 출력
    0
    
  3. 예제 3

    입력
    5 5
    ....#
    #.#..
    #....
    .#..#
    ##.##
    
    예상 출력
    4