11060

백준 11060번

Link: 11060번: 점프 점프


문제 설명

역시 DP문제다.

옆에서 친구가 풀던 문제여서 한번 풀어봤는데, 앞에서 풀었던 문제에서 찾아낸 규칙과 유사한 규칙으로 풀린다는 점을 알아냈다.

될까 해서 돌려보니 역시 성공.

이번에도 코드는 정말 짧다.

하루에 DP를 2문제나 풀어내다니 내 자신이 살짝 놀랍다.

이런식으로 DP에 대한 두려움을 좀 없앨 수 있으면 좋겠다.


정답 코드

//
// Created by Keith_Lee on 26/02/2019.
//

#include <iostream>
#include <vector>
#include <strings.h>

using namespace std;

int N;

int map[1001];
int DP[1001];

int min(vector<int> v){
    int result = 99999;

    for(int i=0; i<v.size(); i++){
        if(result > v[i]){
            result = v[i];
        }
    }

    return result;
}

int main(){
    bzero(DP, sizeof(DP));
    bzero(map, sizeof(map));
    cin >> N;

    for(int i=1; i<=N; i++){
        cin >> map[i];
    }

    for(int i=2; i<=N; i++){
        vector<int> temp;

        for(int j=1; j<i; j++){
            if(j + map[j] >= i){
                temp.push_back(DP[j] + 1);
            }
        }

        DP[i] = min(temp);
    }

    if(DP[N] == 99999){
        DP[N] = -1;
    }

    cout << DP[N] << '\n';

    return 0;
}

Tags:

Categories:

Updated: