public static int solution(int m, int n, int[][] puddles) {
// map 사이즈를 한칸 더 늘려서 선언
map = new int[n + 1][m + 1];
// 물에 잠긴 지역을 map 에 -1로 표시
for (int i = 0; i < puddles.length; i++) {
map[puddles[i][1]][puddles[i][0]] = -1;
}
// 시작 값은 1로
map[1][1] = 1;
// 현 좌표로 올 수 있는 최단 거리는 = 현 좌표의 위 혹은 왼쪽 값이다.
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if(map[i][j] == -1) continue; // 웅덩이를 만날경우 패스
if(map[i-1][j] > 0) map[i][j] += map[i - 1][j] % mod; // 위쪽 값이 0보다 클 경우 -> 위쪽 값 더함
if(map[i][j-1] > 0) map[i][j] += map[i][j-1] % mod; // 왼쪽 값이 0보다 클 경우 -> 왼쪽 값 더함
}
}
return map[n][m] % mod;
}