문제
https://school.programmers.co.kr/learn/courses/30/lessons/131701
아이디어
- 길이가 1인 연속 부분 수열부터 시작해서 길이가
elements.length
인 연속 부분 수열까지 추출한다. - 각 연속 부분 수열에 들어 있는 모든 원소의 값을 더한뒤 그 값을 중복을 허용하지 않는
Set
자료구조에 넣는다. Set
자료구조에 들어 있는 길이를 반환한다.
소스코드
function findSum(start, size, elements) {
let result = 0;
const end = (start + size) % elements.length;
// end가 아직 배열 길이의 최대 범위를 지나지 않은 경우
if (start < end) {
// start 부터 end 까지의 모든 값을 더한다.
for (let i = start; i < end; i++) {
result += elements[i];
}
// end가 배열 길이의 최대 범위를 지나고 start보다 앞 부분을 가리키게 된 경우
} else {
// 0 부터 end 까지의 모든 값을 더한다.
for (let i = 0; i < end; i++) {
result += elements[i];
}
// start 부터 배열의 마지막 까지의 모든 값을 더한다.
for (let i = start; i < elements.length; i++) {
result += elements[i];
}
}
return result;
}
function solution(elements) {
var answer = 0;
const set = new Set();
for (let i = 1; i <= elements.length; i++) {
for (let j = 0; j < elements.length; j++) {
set.add(findSum(j, i, elements));
}
}
return set.size;
}