페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#4003

전진 우회전 좌회전 네비게이션 2s 512MB

문제

N \times N 격자판이 있는데, 가장 좌측 하단(A[N][1])에 있는 칸에 위치한 사람은 처음에 우측을 보거나 위를 보는 방향으로 서있다.

사람은 "전진", "우회전", "좌회전" 중 하나의 선택을 하여 이동을 하는데, 장애물이 있거나 격자판을 벗어나는 방향으로는 이동이 불가능하다.

"전진 우회전 좌회전 네비게이션"은 처음 사람이 우측을 보는지 위를 보는지 알지 못하기에 두 경우를 통틀어 처음에 어느 방향으로 서 있었는지는 별개로 가장 우측 상단의 칸(A[1][N])에 가장 빨리 도착하기 위해 이동해야하는 순서를 알려준다.

  • 경로A를 따라 갔을 때, 처음 우측을 보고 있었다면 5초만에 가고, 위를 보고 있었다면 10초만에 가는 경로라면 경로A는 10초만에 가는 것이 보장된 경로이다.

  • 경로B를 따라 갔을 때, 처음 우측을 보고 있었다면 8초만에 가고, 위를 보고 있었다면 9초만에 가는 경로라면 경로B는 9초만에 가는 것이 보장된 경로이다.

  • 이 경우, 경로B경로A보다 더 빠르게 도착하도록 알려주는 경로이다.

이런 네비게이션을 이용한다면 목적지에 몇 번의 이동을 통해 도착하는 것이 가능한지 출력하는 프로그램을 작성하시오.


입력

첫 줄에 N이 주어진다. (2 \leq N \leq 20)

다음 N줄에 격자판의 상태를 나타내는 길이 N의 문자열이 주어진다. E는 빈 칸이고, H는 장애물이다.

주어지는 문자들 중 가장 첫 문자는 좌측 상단(A[1][1])에 있는 칸의 상태를 뜻하고, 마지막 문자는 우측 하단의 칸(A[N][N])의 상태를 뜻하고, 출발 위치와 도착 위치는 언제나 E임이 보장되며, 항상 목적지에 도착할 수 있음이 보장된다.


출력

네비게이션이 알려주는 좌측 하단(A[N][1])에서 우측 상단의 칸(A[1][N])으로 가는 최단 이동 횟수를 출력한다.


예제

3
EHE
EEE
EEE
9

[전진, 우회전, 전진, 전진, 좌회전, 전진, 좌회전, 전진, 전진] 순서로 이동하면 6초 혹은 9초만에 도착이 가능하다.

다른 어떠한 순서로 진행을 하여도 두 방향 모두 9초 보다 더 빠르게 도착하는 경우는 존재하지 않는다.


출처

USACO 2017 January Gold

로그인해야 코드를 작성할 수 있어요.