만드는 중입니다

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

고속의 무작위 숫자 탐색

면접 대비

시간 제한3초메모리 제한512 MB

요약
5 x 5 보드에서 시작 칸부터 1부터 6까지 적힌 칸을 순서에 상관없이 모두 방문하는 최소 이동 횟수를 구합니다.
난이도

보통10점 중 5점

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

문제

5 x 5 크기의 보드가 주어진다. 보드는 1 x 1 크기의 정사각형 칸으로 이루어져 있다. 각 칸에는 -1, 0, 1, 2, 3, 4, 5, 6, 7 중 하나의 수가 적혀 있다. 칸의 위치는 (r,c)(r, c)로 나타낸다. rr은 행 번호, cc는 열 번호이다. 행 번호는 맨 위가 0이고 아래로 내려갈수록 1씩 증가한다. 열 번호는 맨 왼쪽이 0이고 오른쪽으로 갈수록 1씩 증가한다. 맨 왼쪽 위 칸은 (0,0)(0, 0), 맨 오른쪽 아래 칸은 (4,4)(4, 4)이다. 학생은 -1이 적힌 칸에 들어갈 수 없고, 0부터 7까지 적힌 칸에는 들어갈 수 있다.

학생은 (r,c)(r, c)에서 출발한다. 한 번의 이동으로 상, 하, 좌, 우 중 한 방향으로 한 칸 걸을 수 있다. 또한 한 번의 이동으로 상, 하, 좌, 우 중 한 방향으로 뛰어갈 수 있다. 뛰어가기는 다음 칸이 -1이거나 보드 밖으로 나가게 될 때까지 계속된다. 뛰는 도중 7이 적힌 칸에 도달하면 그 칸에서 멈춘다. 뛰면서 지나간 칸은 방문한 것으로 보지 않는다. 걷기와 뛰기는 모두 1회 이동으로 센다.

학생은 (r,c)(r, c)에서 출발하여 1, 2, 3, 4, 5, 6이 적힌 칸을 순서에 상관없이 모두 방문하려고 한다. 이 수들이 적힌 칸은 각각 하나씩 있다. 같은 칸을 여러 번 방문해도 된다. 모든 칸을 방문하는 데 필요한 최소 이동 횟수를 구한다. 방문할 수 없으면 -1을 출력한다.

입력

첫 번째 줄부터 다섯 번째 줄까지 보드의 각 칸에 적힌 수가 행마다 순서대로 주어진다. ii번째 줄의 jj번째 수는 보드의 (i−1)(i-1)번째 행, (j−1)(j-1)번째 열에 적힌 수이다.

다음 줄에 학생의 현재 위치 rr, cc가 빈칸을 사이에 두고 주어진다.

출력

학생이 (r,c)(r, c)에서 출발하여 1부터 6이 적힌 칸을 순서에 상관없이 모두 방문하는 데 필요한 최소 이동 횟수를 출력한다. 모두 방문할 수 없으면 -1을 출력한다.

제한

0≤r,c≤40 \le r, c \le 4

칸 (r,c)(r, c)에는 0이 적혀 있다.

1부터 6까지 적힌 칸은 각각 하나씩 주어진다.

예제3

  1. 예제 1

    입력
    0 7 1 0 0
    0 0 2 0 0
    0 0 3 0 0
    0 0 4 0 0
    0 0 5 6 -1
    4 1
    
    예상 출력
    6
    
  2. 예제 2

    입력
    0 0 0 -1 1
    0 0 0 -1 3
    0 7 0 6 2
    0 0 0 -1 4
    0 0 0 -1 5
    4 1
    
    예상 출력
    8
    
  3. 예제 3

    입력
    0 0 -1 1 0
    0 0 -1 2 0
    0 0 -1 3 0
    0 0 -1 4 0
    0 7 -1 5 6
    0 1
    
    예상 출력
    -1