プログラマー-通学路[java]


質問元:https://programmers.co.kr/learn/courses/30/lessons/42898

問題の説明


最左上隅(すなわち家屋の所在地の座標)は(1,1)であり、最右下角(すなわち学校の所在地の座標)は(m,n)である.
グリッドサイズm、n、および水没領域座標を含む2 Dフラットピットにパラメータ化します.右側と下側だけに移動し、家から学校までの最短パスの数を1000000 7で割ってからソリューション関数に戻ってください.
せいげんじょうけん
メッシュのサイズm,nは1または100以下の自然数である.
mとnがともに1の場合、入力は提供されません.
水没した地域は0個または10個以上である.
家や学校が水没したら、入力は与えられません.
I/O例
mnpuddlesreturn43[[2, 2]]4

問題を解く

class Solution {
    public int solution(int m, int n, int[][] puddles) {
        int[][] routes = new int[n + 1][m + 1];

        for(int i = 0; i < puddles.length; i++) {
            routes[puddles[i][1]][puddles[i][0]] = -1;
        }


        routes[1][1] = 1;
        for(int i = 1; i < routes.length; i++) {
            for(int j = 1; j < routes[0].length; j++) {
                if(routes[i][j] != -1) {
                    if(routes[i - 1][j] > 0)
                        routes[i][j] += routes[i - 1][j] % 1000000007;
                    if(routes[i][j - 1] > 0)
                        routes[i][j] += routes[i][j - 1] % 1000000007;
                }
            }
        }
        return routes[n][m] % 1000000007;
    }
}
詳細については、「https://velog.io/@ajufresh/%EB%93%B1%EA%B5%A3%EA%B8%B8」を参照してください.