https://school.programmers.co.kr/learn/courses/30/lessons/131701#
문제 생략
import java.util.*;
class Solution {
public int solution(int[] elements) {
HashSet<Integer> res = new HashSet<>();
// 슬라이딩 윈도우
for(int i=1; i<=elements.length; i++){
int start = 0;
int end = start+i;
int sum = 0;
for(int j=start; j<end; j++) // 0~end 전까지의 합 일단 구하기
sum += elements[j];
while(start<elements.length){ // start빼고 end더하기.
res.add(sum);
if(i==elements.length) // 모든 수를 더할 땐 슬라이딩윈도우 필요X
break;
sum -= elements[start++];
sum += elements[end];
end = (end+1)%elements.length;
}
}
return res.size();
}
}
슬라이딩 윈도우를 이용한 문제. 그렇게 어렵지 않았다.
조금 다른 점은 합의 개수를 구하는 것이므로 Set
을 이용해 중복을 방지하고 빠르게 계산할 수 있다.