원순열이므로 배열을 하나 더 이어주었다.
반복문을 이용해서 1개씩, 2개씩, ... elements의 갯수개씩 더해주고, 중복 제거를 위해 HashSet을 사용해서 더해준 값을 추가해주었다.
기존 배열을 하나 더 추가해준 것이 이 문제의 핵심 로직이라고 생각한다!
public int solution(int[] elements) {
int answer = 0;
Set<Integer> set = new HashSet<>();
for (int i = 1; i <= elements.length; i++) {
getSum(i,set,elements);
}
answer = set.size();
return answer;
}
public void getSum(int i, Set<Integer> set, int[] elements){
// i개씩 묶기
int[] newElements = new int[elements.length*2];
System.arraycopy(elements,0,newElements,0,elements.length);
System.arraycopy(elements,0,newElements,elements.length,elements.length);
for (int j = 0; j < elements.length; j++) {
int sum = 0;
for (int k = j; k < j+i; k++) {
sum += newElements[k];
}
set.add(sum);
}
}