회전하는 로봇

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

요약
각 칸에 지정된 기본 명령을 무시하고 로봇에게 직접 명령을 내릴 때 드는 최소 비용으로 왼쪽 위 칸에서 오른쪽 아래 목표 칸까지 이동하는 경로를 구한다.
난이도

보통10점 중 6점

유형
최단 경로, 그래프, 동적 계획법, 그리디
정답자
아직 제출이 없습니다

문제

정사각형 칸들로 이루어진 직사각형 판 위에서 로봇을 조종한다. 로봇은 처음에 북서쪽(왼쪽 위) 모서리 칸에서 동쪽을 바라보며 놓여 있다. 목표는 로봇을 남동쪽(오른쪽 아래) 모서리의 도착 칸까지 이끄는 것이다.

로봇은 다음 다섯 가지 명령을 수행할 수 있다.

  • 직진(Straight): 현재 방향을 그대로 유지하고 앞으로 한 칸 이동한다.
  • 우회전(Right): 현재 방향에서 시계 방향으로 90도 회전한 뒤 앞으로 한 칸 이동한다.
  • 후진(Back): 반대 방향으로 돌아선 뒤 앞으로 한 칸 이동한다.
  • 좌회전(Left): 현재 방향에서 반시계 방향으로 90도 회전한 뒤 앞으로 한 칸 이동한다.
  • 정지(Halt): 현재 칸에 멈춰 게임을 끝낸다.

각 칸에는 이 명령 중 하나가 배정되어 있다. 로봇은 매 단계마다 자신이 있는 칸에 배정된 명령을 수행하지만, 당신이 다른 명령을 내리면 그 명령을 대신 수행한다. 명령을 직접 내릴 때마다 명령 종류에 따른 비용을 지불해야 한다.

로봇은 같은 칸을 여러 번 방문할 수 있다. 로봇이 판 밖으로 나가거나, 도착 칸에 이르기 전에 정지 명령을 수행하면 게임에서 진다.

로봇을 시작 칸에서 도착 칸까지 이끄는 데 필요한 최소 총비용을 계산하는 프로그램을 작성하라.

입력

입력은 여러 개의 데이터셋으로 이루어진다. 입력의 끝은 공백으로 구분된 두 개의 0으로 이루어진 줄로 표시된다. 각 데이터셋의 형식은 다음과 같다.

w h
s(1,1) ... s(1,w)
s(2,1) ... s(2,w)
...
s(h,1) ... s(h,w)
c0 c1 c2 c3

hh와 ww는 각각 판의 행과 열의 개수이며, 2≤h≤302 \le h \le 30, 2≤w≤302 \le w \le 30이다. 이어지는 hh개의 줄에는 각각 공백으로 구분된 ww개의 정수가 있다. 값 s(i,j)s(i, j)는 ii번째 행, jj번째 열의 칸에 배정된 명령을 나타낸다.

  • 0: 직진(Straight)
  • 1: 우회전(Right)
  • 2: 후진(Back)
  • 3: 좌회전(Left)
  • 4: 정지(Halt)

도착 칸에는 항상 정지 명령이 배정되어 있으며, 다른 칸에도 정지가 배정될 수 있다. 마지막 줄에는 네 정수 c0c_0, c1c_1, c2c_2, c3c_3이 주어지는데, 이는 각각 직진, 우회전, 후진, 좌회전 명령을 내릴 때 지불하는 비용이다. 정지 명령은 직접 내릴 수 없다. 모든 비용은 1≤ck≤91 \le c_k \le 9를 만족한다.

출력

각 데이터셋에 대해, 로봇을 도착 칸까지 이끄는 데 필요한 최소 비용을 나타내는 정수 하나만을 한 줄에 출력한다. 그 줄에는 다른 문자가 있어서는 안 된다.

예제3

  1. 예제 1

    입력
    8 3
    0 0 0 0 0 0 0 1
    2 3 0 1 4 0 0 1
    3 3 0 0 0 0 0 4
    9 9 1 9
    4 4
    3 3 4 0
    1 2 4 4
    1 1 1 0
    0 2 4 4
    8 7 2 1
    2 8
    2 2
    4 1
    0 4
    1 3
    1 0
    2 1
    0 3
    1 4
    1 9 3 1
    0 0
    
    예상 출력
    1
    11
    6
    
  2. 예제 2

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

    입력
    2 2
    4 4
    4 4
    1 5 5 5
    0 0
    
    예상 출력
    6