BOJ 17391 무한부스터

BOJ 17391 무한부스터

문제 링크:

문제 내용

NNMM열의 사각 격자의 각 칸에 양의 정수 aija_{ij}가 쓰여 있습니다.

당신은 1행 1열에서 시작하여 최소한의 이동으로 NNMM열에 도달해야 합니다.

당신은 다음과 같은 행동을 할 수 있습니다.

  • 현재 있는 칸이 iijj열이고, 그 칸에 쓰여 있는 수가 aija_{ij}이면, 1 이상 aija_{ij} 이하의 정수 거리만큼 오른쪽으로 이동하거나, 1 이상 aija_{ij} 이하의 정수 거리만큼 아래로 이동할 수 있습니다. 이때 격자 밖으로는 이동할 수 없습니다.

이때 최소 이동 횟수를 구하세요.

입력

첫 번째 줄에는 NNMM이 주어집니다. (1N,M3001 \le N, M \le 300, N×M2N \times M \ge 2)

다음 줄부터 NN줄에 걸쳐서, 각 줄에 MM개의 정수 aija_{ij}가 주어집니다. (1aijmin(N,M)1 \le a_{ij} \le \min(N, M))

출력

최소 이동 횟수를 출력합니다.

문제 풀이

스포일러

BFS 풀이

이 문제를 그래프로 모델링하면, 각 칸에서 바로 이동 가능한 다른 모든 칸으로 간선을 이은 것으로 생각할 수 있습니다. 이때의 간선 개수는 최대 3003300^3개 정도가 되므로, BFS를 하여 최단 거리를 구할 수 있습니다.

DP 풀이

이 문제의 그래프는 DAG입니다. 따라서, 왼쪽 위에서 오른쪽 아래 순으로 보면서 각 칸의 최단 거리를 확정할 수 있습니다.

Last updated on