通学路

11582 ワード

https://programmers.co.kr/learn/courses/30/lessons/42898
通学路の場合は数を求める問題です.
座標(1,1)の家から(m,n)の学校までのルートを探す問題で、真ん中は水たまりを避けます.
ピット[2,2]のように,m,nのような2次元配列でピット座標を入力する.
2 Dアレイで最短距離を求める方法は次のとおりです.

-> DP
public class Main
{
    public static int func(int m, int n, int[][] puddles)
    {
        int[][] street = new int [n][m]; // m을 열, n을 행
        street[0][0] = 1;
        for (int i=0; i<puddles.length; i++) // 웅덩이 있는 곳을 -1로 표시
            street[puddles[i][1]-1][puddles[i][0]-1] = -1;
        for (int i=0; i<n; i++)
        {
            for (int j=0; j<m; j++)
            {
                if (street[i][j] == -1)
                { // 웅덩이 만날 경우
                    street[i][j] = 0;
                    continue; // 0으로 바꾸고 continue. 
                    // 0에서 더 더하면 안됨
                }
                if (i != 0) // 첫 행 아니면 위에 값 더함
                    street[i][j] += street[i-1][j];
                if (j != 0) //첫 열 아니면 왼쪽 값 더함
                    street[i][j] += street[i][j-1];
            }
        }
        
        for (int i=0; i<n; i++)
        {
            for (int j=0; j<m; j++)
            {
                System.out.print(street[i][j] + " ");
            }
            System.out.println();
        }
        
        return street[n-1][m-1];
    }
    
    public static void main(String[] args) 
    {
    	int m = 6, n = 4; // 열과 행
        int[][] puddles = {{2,2}, {4,3}};
        func(m, n, puddles);
    }
}