문제
11060번: 점프 점프
재환이가 1×N 크기의 미로에 갇혀있다. 미로는 1×1 크기의 칸으로 이루어져 있고, 각 칸에는 정수가 하나 쓰여 있다. i번째 칸에 쓰여 있는 수를 Ai라고 했을 때, 재환이는 Ai이하만큼 오른쪽으로
www.acmicpc.net
소스코드
#include <bits/stdc++.h>
using namespace std;
int arr[1001];
int dp[1001];
int n;
void res(int x) {
for (int i = x + arr[x]; i >= x + 1; i--) {
if (i<=n){
if (dp[i]==-1 || dp[i] > dp[x] + 1) {
dp[i] = dp[x] + 1;
res(i);
}
}
}
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> arr[i];
dp[i] = -1;
}
dp[1] = 0;
res(1);
cout << dp[n];
}
풀이
모든 범위의 수를 검사해보는데, dp[i]>dp[x]+1이 성립할때만 검사하여, 모든 경우의 수를 검사하지 않고 필요한 부분들만 검사하게된다.
인덱스의 범위를 초과하면 자동으로 다음 문으로 넘어간다.
이부분이 이문제의 핵심인거 같다.
'Algorithm > dynamic programming' 카테고리의 다른 글
| [백준] C++ 알고리즘 2294번 - 동전2문제 (0) | 2021.09.10 |
|---|---|
| [백준] 알고리즘 11048번 - 이동하기문제 (0) | 2021.09.08 |
| [백준] 알고리즘 2491번 - 수열 문제 (0) | 2021.04.06 |
| [백준] 알고리즘 15990번 - 1, 2, 3 더하기 5 문제 (0) | 2021.04.05 |
| [백준] 알고리즘 9095번 - 1, 2, 3 더하기 문제 (0) | 2021.04.05 |
