부분 수열의 합의 종류를 구하는 문제.
중복된 합이 있을 수 있으므로 set을 사용해 중복함수를 삭제해줬다.
시작값부터 하나씩 대해주면서 set에 넣었고 한바퀴를 다 돌면 start 위치를 다음으로 넘겨서 더해줬다. 그러면 길이가 1인 부분수열부터 길이가 n인 부분수열 합까지 만들어져서 set에 들어가게 된다. 순환 구조 같은 경우에는 % 연산자를 사용해 나머지를 이용하면 쉽게 더할 수 있다.
import java.util.*;
class Solution {
public int solution(int[] elements) {
int answer = 0;
int size = elements.length;
Set<Integer> numberSet = new HashSet<>();
for(int startNum = 0; startNum<elements.length;startNum++){
int sum = 0;
for(int num = startNum; num<startNum + elements.length; num++){
sum += elements[num % size];
numberSet.add(sum);
}
}
answer = numberSet.size();
return answer;
}
}