코드
import java.io.*;
import java.util.*;
public class Main {
static int M,N;
static int[] dx = {-1,0,1,0};
static int[] dy = {0,1,0,-1};
static int[][] arr;
static boolean[][] visit;
static int[][] memo;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
M = Integer.parseInt(st.nextToken());
N = Integer.parseInt(st.nextToken());
arr = new int[M][N];
visit = new boolean[M][N];
memo = new int[M][N];
for(int i=0; i<M; i++) {
st = new StringTokenizer(br.readLine());
for(int j=0; j<N; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
visit[0][0] = true;
memo[M-1][N-1] = 1;
int result = dfs(0, 0);
System.out.println(result);
}
private static int dfs(int y, int x) {
if(y==M-1 && x==N-1) {
return 1;
}
for(int i=0; i<4; i++) {
int ny = y + dy[i];
int nx = x + dx[i];
if(ny>=M || ny<0 || nx>=N || nx<0 || arr[ny][nx]>=arr[y][x]) continue;
if(visit[ny][nx]) {
memo[y][x] += memo[ny][nx];
}else {
visit[ny][nx] = true;
memo[y][x] += dfs(ny,nx);
}
}
return memo[y][x];
}
}
- 굳이 visit 배열 안쓰고 그냥 dp배열 -1로 초기화 해놓고 -1 아닌 경우 dp 반환하도록 하는 것이 편할 듯합니다.
- dp[M-1][N-1]을 1로 설정하지 않아서 다른 경로에서 방문한 경우 0을 반환하는 오류가 발생해 틀렸었다.