Hopscotch 50

면접 대비

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

요약
1부터 k까지의 번호가 적힌 n×n 격자에서 각 번호를 순서대로 하나씩 방문하는 경로의 맨해튼 거리 합의 최솟값을 구하고, 빠진 번호가 있으면 -1을 출력한다.
난이도

보통10점 중 4점

유형
동적 계획법, 구현, 행렬, 완전 탐색
정답자
아직 제출이 없습니다

문제

도시에 새 예술 작품이 설치되었고, 그것은 당신에게 유치한 놀이를 하고 싶게 만든다. 예술 작품은 n×n 개의 정사각형 타일로 이루어진 바닥이다. 각 타일에는 1부터 k까지의 수 하나가 적혀 있다. 당신은 그 위에서 hopscotch를 하려고 한다. 어떤 1번 타일에서 시작해 어떤 2번 타일로, 그다음 3번 타일로, 이런 식으로 k번 타일에 도달할 때까지 뛰어간다. 당신은 뛰어난 hopper라서 필요한 만큼 멀리 뛸 수 있다. 1부터 k까지의 각 수에 해당하는 타일을 정확히 하나씩 방문한다.

완전한 Hopscotch 게임에서 가능한 총 이동 거리의 최솟값은 얼마인가? 맨해튼 거리를 사용한다. (x1, y1) 타일과 (x2, y2) 타일 사이의 거리는 |x1 − x2| + |y1 − y2|이다.

입력

입력의 첫 줄에는 두 정수 n (1 ≤ n ≤ 50)과 k (1 ≤ k ≤ n2)가 공백으로 구분되어 주어진다. 예술 작품은 1부터 k까지의 수가 적힌 타일로 이루어진 n×n 행렬이다.

다음 n개 줄 각각에는 n개의 정수 x (1 ≤ x ≤ k)가 공백으로 구분되어 주어진다. 이것이 예술 작품이다.

출력

어떤 1번 타일에서 시작해 어떤 k번 타일에서 끝나는 최단 경로의 총 길이를 정수 하나로 출력한다. 불가능하면 −1을 출력한다.

예제2

  1. 예제 1

    입력
    10 5
    5 1 3 4 2 4 2 1 2 1
    4 5 3 4 1 5 3 1 1 4
    4 2 4 1 5 4 5 2 4 1
    5 2 1 5 5 3 5 2 3 2
    5 5 2 3 2 3 1 5 5 5
    3 4 2 4 2 2 4 4 2 3
    1 5 1 1 2 5 4 1 5 3
    2 2 4 1 2 5 1 4 3 5
    5 3 2 1 4 3 5 2 3 1
    3 4 2 5 2 5 3 4 4 2
    
    예상 출력
    5
    
  2. 예제 2

    입력
    10 5
    5 1 5 4 1 2 2 4 5 2
    4 2 1 4 1 1 1 5 2 5
    2 2 4 4 4 2 4 5 5 4
    2 4 4 5 5 5 2 5 5 2
    2 2 4 4 4 5 4 2 4 4
    5 2 5 5 4 1 2 4 4 4
    4 2 1 2 4 4 1 2 4 5
    1 2 1 1 2 4 4 1 4 5
    2 1 2 5 5 4 5 2 1 1
    1 1 2 4 5 5 5 5 5 5
    
    예상 출력
    -1