비교적 쉬운 문제를 풀었고 어렵지는 않았지만 그냥 푸는 방식이 전이랑 조금 달라서 이런 방법도 있구나~ 꺠달았던 문제다. 이 문제는 i-1 그리고 i-2의 차이가 같다면은 카운트를 늘리는 문제다. 이 문제가 Stock 문제랑 뭐가 다를까 하고 계속 생각해봤는데 결국 겹치는 구간을 계속해서 잡아주는 공통점이 있었기에 어떤 곳을 공통점으로 잡아줄까 고민하면서 문제를 풀었다.
먼저, i-1 그리고 i-2의 차이를 본 다음에 만약 숫자를 늘릴일이 있으면 바로 전 구간에서 +1을 해주고 Res 값에 더해줌으로 누적되는 최고값을 얻을 수 있었다. 이 문제는 Sliding window 형식으로도 풀 수 있을거라 생각하는데 나중에 시간이 되면은 도전해봐야겠다.
class Solution {
public int numberOfArithmeticSlices(int[] nums) {
if(nums.length < 3) return 0;
int[] dp = new int[nums.length];
dp[0] = 0;
dp[1] = 0;
int res = 0;
for(int i = 2; i < nums.length; i++){
if(nums[i] - nums[i-1] == (nums[i-1] - nums[i-2])){
dp[i] = dp[i-1] + 1;
res += dp[i];
}
}
return res;
}
}