Algorithm/dp

[알고리즘] 리트코드 45. 점프 게임 II c++ // dp, 그리디 bfs

Mini_96 2024. 7. 1. 17:32

* 나의문제점 : 너무 그리디로 접근하려고함

그리디는 최후의 수단임.

완탐-> 완탐dp -> pq,정렬 -> 이분탐색 ->  ... -> 그리디 순으로 접근하는게 맞음.

 

* 완탐

 

* 완탐 + dp

int dp[10000+4];
vector<int> nums;

class Solution {
public:
    int jump(vector<int>& _nums) {
        memset(dp,-1,sizeof(dp));
        nums=_nums;
        return dfs(0);
    }

    int dfs(int pos){
        if(pos>=nums.size()-1){
            return 0;
        }
        if(dp[pos]!=-1) return dp[pos];

        dp[pos]=10001; //도달할수없는값
        for(int j=1;j<=nums[pos];++j){ //모든 점프가능한곳에대해
            dp[pos]=min(dp[pos],dfs(pos+j)+1);
        }
        return dp[pos];
    }
};

dp[pos] = min()이부분이 어떻게 작동하는지 반드시 알아야함!

 

* 그리디 + bfs?

이걸 O(N)에 푸는 이런게 가능하다니..