int[] element
부분합을 담을 Set을 만든다.
첫번째 원소부터 길이가 1 ~ len 인 부분 수열 합을 구한다.
ex) 길이가 5이고 시작원소가 3이라면, 인덱스 번호 [start~end] → [3~3], [3~4], [3~5], [3~6], [3~7] 의 합을 구하게 된다.
1) 시작 인덱스 값에서 길이를 더하면 element 길이가 넘치므로, 원소의 값을 더할 때 index = (end) % len 으로 한다.
구한 합을 set 에 넣는다.
set의 사이즈를 리턴한다.
import java.util.HashSet;
import java.util.Set;
class Solution {
public int solution(int[] elements) {
Set<Integer> sums = new HashSet<>();
int len = elements.length;
for (int i = 1; i <= len; i++) {
for (int j = 0; j < len; j++) {
sums.add(find_sum(elements, j, j + i));
}
}
return sums.size();
}
int find_sum(int[] elements, int start, int end) {
int sum = 0;
int len = elements.length;
for (int i = start; i < end; i++) {
sum += elements[i % len];
}
return sum;
}
}
class Solution1 {
public int solution(int[] elements) {
Set<Integer> sums = new HashSet<>();
int len = elements.length;
for (int i = 0; i < len; i++) {
int sum = 0;
for (int j = 0; j < len; j++) {
sum += elements[(i+j) % len];
sums.add(sum);
}
}
return sums.size();
}
}