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

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

좌회전 금지

면접 대비

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

요약
직진과 우회전만으로 미로의 시작점에서 도착점까지 이르는 최단 경로 길이를 구합니다.
난이도

보통10점 중 5점

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

문제

  • 세 머리 모두: 원탁의 기사라고?
  • 로빈: 그렇소.
  • 왼쪽 머리: 그렇다면 내가 자네를 죽여야겠군.
  • 가운데 머리: 그래야 하나?
  • 오른쪽 머리: 글쎄, 난 아닌 것 같은데.
  • 가운데 머리: 그럼 난 뭐라고 생각하지?
  • 왼쪽 머리: 죽이자고.
  • 오른쪽 머리: 그러지 말고 잘 대해 주자니까.
  • 가운데 머리: 아, 좀 조용히 해.

머리 셋이 옥신각신하는 사이에 기사는 달아났다. 오른쪽 머리는 자기가 나서서 성터를 뒤지기로 했다. 기사를 찾으면 왼쪽 머리, 가운데 머리와 함께 그를 해치우고 차와 비스킷을 먹을 참이다.

아래 8×128 \times 12 미로를 보자. 회색으로 칠한 칸은 벽이라서 들어갈 수 없다.

오른쪽 머리(출발점 S)와 기사(도착점 F) 사이의 최단 경로는 그림처럼 길이가 3이다. 그런데 오른쪽 머리는 좌회전도 U턴도 하지 못한다. 앞으로 가거나 오른쪽으로 도는 것만 된다. 그래서 오른쪽 머리가 찾을 수 있는 가장 짧은 경로는 훨씬 길어져서 29가 된다.

한 번 움직일 때 오른쪽 머리는 바로 앞 칸이나 바로 오른쪽 칸으로 들어가고, 들어간 방향을 새로 바라본다. 첫 이동만은 동서남북 어느 쪽으로든 할 수 있다. 경로의 길이는 이렇게 움직인 칸 수다.

입력

첫 줄에 미로의 개수 NN(N>0N > 0)이 주어진다. 이어서 미로마다 첫 줄에 행의 수 rr(3<r≤203 < r \le 20)와 열의 수 cc(3<c≤203 < c \le 20)가 공백을 사이에 두고 주어지고, 그다음 rr개 줄에 각각 cc개의 문자가 주어져 미로를 나타낸다.

X는 벽이라서 들어갈 수 없는 칸, S는 출발 칸, F는 기사가 있는 칸이고, 공백은 자유롭게 지나갈 수 있는 칸이다.

출력

미로마다 오른쪽 머리가 출발 칸에서 도착 칸까지 갈 수 있는 가장 짧은 경로의 길이를 한 줄에 하나씩 출력한다.

힌트

  • 오른쪽 머리는 출발 칸에서 동서남북 어느 방향으로든 첫 걸음을 뗄 수 있다. 그다음부터는 앞으로 가거나 오른쪽으로 도는 것만 할 수 있다.
  • 출발 칸과 도착 칸은 절대 같지 않다.
  • 미로는 항상 사방이 벽으로 둘러싸여 있다.
  • 출발 칸과 도착 칸 사이에는 오른쪽 머리가 실제로 지나갈 수 있는 경로가 항상 있다고 가정해도 된다.

예제1

  1. 예제 1

    입력
    1 
    10 14 
    XXXXXXXXXXXXXX 
    X          XXX
    X XFXXXXX    X 
    XXX   XX  XX X 
    X S          X 
    XX  XXXXXX X X 
    X        X X X 
    X X      X X X 
    XXX XX       X 
    XXXXXXXXXXXXXX
    
    예상 출력
    29