문제: https://leetcode.com/problems/jump-game-vii/
Jump Game VII - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
0번째 인덱스부터 시작해서 i + minJump <= j <= min(i + maxJump, s.length - 1)만큼 움직일 수 있을 때 맨 끝 인덱스에 도달 가능한지 구하는 문제다.
초기 상태에서 점프할 수 있는 구간은 minJump와 maxJump 사이 구간이다. 이때, minJump와 maxJump 구간에서 점프할 수 있는지 확인하는 방법은 구간의 카운트 값을 올려주는 것이다. 진입할 때 1을 증가시키고, 빠져나갈 때 1을 감소시키면 구간을 확인할 수 있다. s[j]에서 값이 '0'인 경우에만 점프할 수 있으므로, cnt > 0이며 s[j]가 '0'인 경우에 점프가 가능하다. 맨 마지막 s.size() - 1 지점에서 s[j]가 '0'이고 cnt > 0이면 끝지점까지 도달할 수 있다는 뜻이다.
class Solution {
public:
bool canReach(string s, int minJump, int maxJump) {
vector<bool> dp(s.size());
dp[0] = true;
int cnt = 0;
for(int i = minJump; i < s.size(); i++){
cnt += dp[i - minJump];
if(i - maxJump > 0){
cnt -= dp[i - maxJump - 1];
}
dp[i] = s[i] == '0' && cnt;
}
return dp.back();
}
};
'* Computer Science > Algorithm' 카테고리의 다른 글
DP 연습 (0) | 2021.10.09 |
---|---|
670. Maximum Swap (0) | 2021.10.04 |
1759. 암호 만들기 (0) | 2021.09.18 |
718. Maximum Length of Repeated Subarray (0) | 2021.08.28 |
351. Android Unlock Pattern (0) | 2021.08.28 |