YeJin's Footsteps

1890번: 점프 본문

Computer Science & Engineering/알고리즘

1890번: 점프

YeJinii 2021. 8. 6. 20:20

문제 링크

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

 

1890번: 점프

첫째 줄에 게임 판의 크기 N (4 ≤ N ≤ 100)이 주어진다. 그 다음 N개 줄에는 각 칸에 적혀져 있는 수가 N개씩 주어진다. 칸에 적혀있는 수는 0보다 크거나 같고, 9보다 작거나 같은 정수이며, 가장

www.acmicpc.net

 

문제 풀이 코드

#include <iostream>

using namespace std;

const int MN = 101;
long long dp[MN][MN];
int input[MN][MN];

int main(void){

    ios::sync_with_stdio(false); cin.tie(NULL);
    int n; cin>>n;

    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            int m; cin>>m;
            input[i][j]=m;
        }
    }

    dp[0][0]=1;
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            if(dp[i][j]==0||(i==n-1&&j==n-1)) continue;
            
            if((i+input[i][j])<n) dp[i+input[i][j]][j] += dp[i][j];
            if((j+input[i][j])<n) dp[i][j+input[i][j]] += dp[i][j]; 
            
        }
    }

    cout<<dp[n-1][n-1];
    return 0;
}

 

* 처음 제출 시 틀린 부분

 

dp문제이고 dp배열에 전의 경우의 수가 축적 되기 때문에

if((i+input[i][j])<n) dp[i+input[i][j]][j] += 1;

if((j+input[i][j])<n) dp[i][j+input[i][j]] += 1;

이 아닌

if((i+input[i][j])<n) dp[i+input[i][j]][j] += dp[i][j];

if((j+input[i][j])<n) dp[i][j+input[i][j]] += dp[i][j];

위의 식으로 풀어야한다.

 

 

'Computer Science & Engineering > 알고리즘' 카테고리의 다른 글

거리두기 확인하기  (0) 2021.09.10
2011번: 암호코드  (0) 2021.08.07
2407번: 조합  (0) 2021.08.06
2 x n 타일링  (0) 2021.07.31
문자열 압축  (0) 2021.07.30
Comments