문제 링크 : https://www.acmicpc.net/problem/11060
#include <bits/stdc++.h>
using namespace std;
int n, arr[1001], dp[1001];
int main()
{
cin >> n;
for(int i=0; i<n; i++)
{
cin >> arr[i];
dp[i] = 999999999; //무작위 큰 수로 초기화
}
dp[0] = 0; //첫 시작을 위한 초기화
for (int i = 0; i < n; i++)
{
for (int j = 1; j <=arr[i]; j++) //arr[i] 이하(1~arr[i]) 값만큼 오른쪽으로 점프 가능
{
if (dp[i] != 999999999)
{
dp[i + j] = min(dp[i + j], dp[i] + 1); //점화식을 통해 갱신
}
}
}
if (dp[n-1] == 999999999) { cout << -1; }
else { cout << dp[n-1]; }
return 0;
}
첫 초기화값을 잘 선정해야 한다.
'백준 > 실버' 카테고리의 다른 글
[백준 4963번] 섬의 개수 (C++) (0) | 2023.02.06 |
---|---|
[백준 7562번] 나이트의 이동 (C++) (0) | 2023.02.06 |
[백준 2193번] 이친수 (C++) (0) | 2023.02.06 |
[백준 14501번] 퇴사 (C++) (0) | 2023.02.06 |
[백준 11048번] 이동하기 (C++) (0) | 2023.02.06 |