Algorithm/dynamic programming
[백준] 알고리즘 1890번 - 점프 문제
낭강
2021. 4. 5. 16:58
문제 : www.acmicpc.net/problem/1890
1890번: 점프
첫째 줄에 게임 판의 크기 N (4 ≤ N ≤ 100)이 주어진다. 그 다음 N개 줄에는 각 칸에 적혀져 있는 수가 N개씩 주어진다. 칸에 적혀있는 수는 0보다 크거나 같고, 9보다 작거나 같은 정수이며, 가장
www.acmicpc.net
소스코드
#include <bits/stdc++.h>
using namespace std;
int n;
int arr[101][101];
long long dp[101][101];
long long dfs(int x, int y) {
if (x == n-1 && y == n-1) return 1;
else if (dp[x][y] == -1) {
dp[x][y] = 0;
// 오른쪽가는친구
int right_x = x+ arr[x][y];
int right_y = y;
if (right_x >= 0 && right_x < n && right_y >= 0 && right_y < n) {
dp[x][y] += dfs(right_x, right_y);
}
int down_x = x;
int down_y = y + arr[x][y];
if (down_x >= 0 && down_x < n && down_y >= 0 && down_y < n) {
dp[x][y]+=dfs(down_x, down_y);
}
}
return dp[x][y];
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> arr[i][j];
dp[i][j] = -1;
}
}
cout<<dfs(0, 0);
}
풀이
DFS와 DP를 같이 이용하여 해결할 수 있는 문제입니다.
이건 저도 해설을 봐서 풀었는데, 좀 더 공부한 후에 수정하겠습니다.