

나의 풀이
import java.util.*;
class Solution {
public int solution(int[] elements) {
int answer = 0;
HashSet<Integer> set = new HashSet<>();
for (int i = 1; i <= elements.length; i++) { // 1
for (int j = 0; j < elements.length; j++) { // 2
int sum = 0;
for (int k = j; k < j + i; k++) { // 3
sum += elements[k % elements.length];
}
set.add(sum);
}
}
return answer = set.size();
}
}
과정
- 한개씩부터 모든 것을 더했을 때를 순회하는 반복문
- elements를 0번째부터 마지막까지 순회하는 반복문
- j부터 i번째까지의 합을 구하는 반복문(k % elements.length 이유 : 반복문의 중복을 피하고, 배열의 경계를 넘어서는 순환 부분 배열도 고려할 수 있음)
다른 사람 풀이
import java.util.*;
class Solution {
public int solution(int[] elements) {
Set<Integer> set = new HashSet<>();
int[] dp = new int[elements.length];
for(int len = 1;len <= elements.length; len++){
for(int i = 0;i<elements.length;i++){
dp[i] += elements[(len+i-1)%elements.length];
set.add(dp[i]);
}
}
return set.size();
}
}