


내가 작성한 코드
import java.util.*;
class Solution {
public int solution(int[] elements) {
Set<Integer> uniqueSums = new HashSet<>(); // 수열 합 중복 제거를 위한 set
int n = elements.length;
// 길이 반복
for (int length = 1; length <= n; length++) {
// 시작점 반복
for (int start = 0; start < n; start++) {
int sum = 0;
// 현재 길이의 부분 수열 합 계산
for (int i = 0; i < length; i++) {
sum += elements[(start + i) % n];
}
uniqueSums.add(sum);
}
}
return uniqueSums.size();
}
}
다른 사람의 코드
import java.util.*;
class Solution {
public int solution(int[] elements) {
Set<Integer> set = new HashSet<>();
int[] dp = new int[elements.length]; // 각 인덱스를 시작점으로 하는 누적합을 저장하는 용도
// 부분 수열의 길이: 1부터 배열 전체 길이까지 시도
for (int len = 1; len <= elements.length; len++) {
// 인덱스 i부터 길이 len만큼 더한 누적합
for (int i = 0; i < elements.length; i++) {
dp[i] += elements[(len + i - 1) % elements.length];
set.add(dp[i]);
}
}
return set.size();
}
}
Share article