점프 - 1890

2025. 2. 13. 09:56PS/백준

문제

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

느낀점

dp 문제를 풀 때, 어떻게 배열을 정의할 것인지 먼저 정의하는 것이 좋다. 2차원 배열의 각 좌표에서는 해당 좌표까지 오는데 가능한 경우의 수를 담으면 된다. bfs와 비슷한 사고가 가능

풀이

#include <iostream>
#include <vector>

int main()
{
    int N, elem;
    std::cin >> N;
    std::vector<std::vector<int>> arr;
    std::vector<std::vector<long>> dp(N, std::vector<long>(N, 0));
    /**
     * dp문제를 풀 때, 수열을 어떻게 정의할 것인지 먼저 생각하기
     * 2차원 배열의 각 좌표에서는 해당 좌표까지 오는데 가능한 경우의 수를 담으면 됨
     */
    dp[0][0] = 1;
    for (int i = 0; i < N; i++)
    {
        std::vector<int> temp;
        for (int j = 0; j < N; j++)
        {
            std::cin >> elem;
            temp.push_back(elem);
        }
        arr.push_back(temp);
    }
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            int value = arr[i][j];
            int right = j + value;
            int down = i + value;
            if (dp[i][j] == 0 || (i == N-1 && j == N-1))
            {
                continue;
            }

            if (right < N)
            {
                dp[i][right] += dp[i][j];
            }

            if (down < N)
            {
                dp[down][j] += dp[i][j];
            }
        }
    }

    std::cout << dp[N-1][N-1];

    return 0;
}

'PS > 백준' 카테고리의 다른 글

단어 뒤집기 2 - 17413  (0) 2025.02.13
가장 큰 증가하는 부분 수열 - 11055  (0) 2025.02.13
주식 - 11501  (0) 2025.02.13
한 줄로 서기 - 1138  (0) 2025.02.12
미로 만들기 - 1347  (0) 2025.02.12