현재 위치가 (r, c)일 때, 이전의 위치는 좌, 우, 그리고 위가 가능하다. 이렇게 (N, M)에서부터 (1,1)로 recursive 하게 내려가면서 모든 경우를 조사하여 풀 수 있는데, sub-problems이 반복된다. 따라서, Dynamic Programming으로 풀 수 있다.
Bottom-Up 방식으로 개선하여, (1, 1)에서부터 (N, M)으로 iterative 하게 dp를 작성한다.
이때, 이미 탐사한 지역을 방문하면 안 되기 때문에, (r, c)에서의 값을 아래와 같이 구분하여 구한다.
시간 복잡도는 O(NM)이다.