通学路
11582 ワード
https://programmers.co.kr/learn/courses/30/lessons/42898
通学路の場合は数を求める問題です.
座標(1,1)の家から(m,n)の学校までのルートを探す問題で、真ん中は水たまりを避けます.
ピット[2,2]のように,m,nのような2次元配列でピット座標を入力する.
2 Dアレイで最短距離を求める方法は次のとおりです.
-> DP
通学路の場合は数を求める問題です.
座標(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);
}
}
Reference
この問題について(通学路), 我々は、より多くの情報をここで見つけました https://velog.io/@bluesun147/등굣길-경로의-경우의-수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol