Coding Is My Life

코딩은 인생

다이나믹 프로그래밍

[백준/C++][점프 점프(11060번)]

산기대 컴공 2020. 12. 14. 19:25
728x90

문제

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

 

11060번: 점프 점프

재환이가 1×N 크기의 미로에 갇혀있다. 미로는 1×1 크기의 칸으로 이루어져 있고, 각 칸에는 정수가 하나 쓰여 있다. i번째 칸에 쓰여 있는 수를 Ai라고 했을 때, 재환이는 Ai이하만큼 오른쪽으로

www.acmicpc.net

문제 해결

1. 그 자리에서 3을 점프뛰면 앞, 앞앞, 앞앞앞까지 탐색하는데 현재 dp의 값+1과 탐색한 자리에 dp값과 비교해서 작은 값을 선택한다.

2. 만약 그 자리가 끝이거나 넘어서면 결과값의 dp이므로 현재 자리의 dp값과 결과값dp를 비교해서 작은값이 결과값dp가 된다.

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#define infy 987654321
using namespace std;
i   nt min(int a,int b){
    if(a>b){return b;}
    else{return a;}
}
int main(void){
    int N,ary[1002],dp[1002],result = infy,temp = infy;
    cin >> N;
    for(int i = 0;i<N;i++){
        cin >> ary[i];
    }
    if(N == 1){cout << 0;}
    else{
    for(int i = 0;i<N;i++){dp[i] = infy;}
    dp[0= 0;
    for(int i = 0;i<N;i++){
        int next = ary[i];
        for(int j = i+1;j<=i+next;j++){
            if(j>=N-1){
                temp = min(temp,dp[i]+1);
            }
            else{
                dp[j] = min(dp[i]+1,dp[j]);
            }
        }
    }
    if(temp == infy){cout << "-1";}
    else{cout << temp;}
    }
}
cs
728x90