function solution(elements) {
var n = elements.length;
var sums = new Set();
for (let i = 0; i < n; i++) {
let sum = 0;
for (let j = i; j < i + n; j++) {
sum += elements[j % n];
sums.add(sum);
}
}
return sums.size;
}
sums 이라는 Set 생성하여 중복된 합을 허용하지 않는다.
for
각 원소에서 시작하는 부분 수열 검사
j 현재 시작 인덱스부터 시작해 수열의 끝까지의 부분 수열 계산
sum += elements[j % i] 현재 부분 수열의 합을 계산 하는 부분 % 을 사용하여 주어진 배열의 길이 n으로 나눈 나머지를 구하는 것을 의미한다.
배열의 끝에 도달했을 때 다시 처음으로 돌아가기 위함
j = 0 일때 ele[0%5] ele[0] 이 되고 첫번째 원소 1...
다른 풀이
function solution(elements) {
const set = new Set();
for (let i = 1; i <= elements.length; i++) {
const els = elements.concat(elements.slice(0, i));
for (let j = 0; j < elements.length; j++) {
set.add(els.slice(j, j + i).reduce((a, c) => a + c, 0));
}
}
return set.size;
}