출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]

상세 컨텐츠

본문 제목

백준 1890 점프(dynamic programming)

알고리즘

by 장동균 2020. 7. 7. 23:56

본문

https://www.acmicpc.net/problem/1890

 

1890번: 점프

문제 N×N 게임판에 수가 적혀져 있다. 이 게임의 목표는 가장 왼쪽 위 칸에서 가장 오른쪽 아래 칸으로 규칙에 맞게 점프를 해서 가는 것이다. 각 칸에 적혀있는 수는 현재 칸에서 갈 수 있는 거��

www.acmicpc.net

#include <iostream>

using namespace std;

const int MAX = 100 + 1;
int N;
int arr[MAX][MAX];
long long dp[MAX][MAX];
void findway()
{
    dp[0][0] = 1;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            if (arr[i][j] == 0)
                continue;
            if (i + arr[i][j] < N)
                dp[i + arr[i][j]][j] += dp[i][j];
            if (j + arr[i][j] < N)
                dp[i][j + arr[i][j]] += dp[i][j];
        }
    }
    cout << dp[N - 1][N - 1];
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> N;
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
            cin >> arr[i][j];
    findway();
}

그렇게 어려운 것은 없었고 논리 자체도 단순하다. 작은 부분부터 계산해서 점점 키워나가는 dynamic programming 특성상 갈 수 있는 방향인 오른쪽과 아랫쪽만 정의해놓으면 됐다.

관련글 더보기

댓글 영역