BOJ 18529 Hopscotch 50

BOJ 18529 Hopscotch 50

문제 링크:

문제 내용

n×nn \times n의 사각 격자의 각 칸에 1 이상 kk 이하의 정수가 쓰여 있습니다. 당신은 이 격자 위에서 Hopscotch 놀이를 하려고 합니다. Hopscotch는 다음과 같은 과정으로 이루어집니다.

  • 먼저 1이 쓰여 있는 칸 중 하나를 밟습니다.
  • 현재 밟은 수가 xx일 때, x+1x+1이 쓰여 있는 칸 중 하나로 점프합니다. 이를 kk가 쓰여 있는 칸을 밟을 때까지 반복합니다.

(x1,y1)(x_1, y_1)에서 (x2,y2)(x_2, y_2)로 점프할 때 필요한 에너지는 x1x2+y1y2|x_1 - x_2| + |y_1 - y_2|입니다. Hopscotch를 하는 방법이 존재한다면, 필요한 에너지의 합의 최솟값을 출력하세요.

입력

첫 번째 줄에 nnkk가 주어집니다. (1n501 \le n \le 50, 1kn21 \le k \le n^2)

다음 nn줄에 걸쳐서 사각 격자가 주어집니다.

출력

주어진 입력에서 Hopscotch를 할 수 있다면, 필요한 에너지의 합의 최솟값을 출력합니다. 그것이 불가능하다면, -1을 대신 출력합니다.

문제 풀이

스포일러

먼저, 모든 칸들을 그 칸에 쓰여있는 수로 분류합니다. 어떤 수 ii에 대해 ii가 쓰여있는 수가 한 개도 없다면 답은 -1입니다.

이제 쓰여있는 수가 증가하는 순서대로 DP를 할 수 있습니다. 칸의 총 개수는 최대 2500개이므로, 모든 가능한 이전 칸으로부터의 거리를 계산하여 DP를 하면 됩니다.

Last updated on