피라미드 경로

Haechan Kim·2021년 10월 14일
0

알고리즘

목록 보기
14/27


다음과 같은 피라미드가 있을 때 A에서 맨 밑의 K, L, M, N, O 까지 내려오는 경로를 구하는 문제이다.
각 지점에서 왼쪽 아래 또는 오른쪽 아래로 내려갈 수 있다.
이 문제는 dp를 이용해서 해결 할 수 있다. 예를 들어 A에서 L까지 가는 경로는 A에서 G까지 가는 경로와 A에서 H까지 가는 경로를 더한 값이다.
다시 A에서 H까지 가는 경로는 A에서 D, E 까지 가는 경로를 더한 값과 같다.
이처럼 겹치는 부분문제들을 갖고 있는 문제는 dp를 이용하면 쉽게 해결할 수 있다.

피라미드를 행과 열이 각각 5인 이차원 배열에 넣는다고 생각하면 다음과 같다.


public class Main
{
    public static void solution(int m, int n)
    {
        int[][] street = new int[n][m];

        street[0][0] = 1;
        
        for (int i=1; i<n; i++)
        {
            for (int j=0; j<=i; j++)
            { // 첫 열이거나 (ABDGK)
             // ACFJO 처럼 끝 대각선인 경우
                if (j == 0 || i == j)
                    street[i][j] = 1; // 경로가 1개 밖에 없다
                else // 그렇지 않은 경우
                    street[i][j] = street[i-1][j] + street[i-1][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();
        }
    }
    public static void main(String[] args) 
	{
	    int m = 5;
	    int n = 5;
	    solution(m, n);
	}
}

0개의 댓글