

연속된 배열에서 1, 2, 3 ,4 5, 개 씩 잡아서 더한것이 중복되지 않고 count 될수 있는가 하는 문제이다.
쉽게 하는 방법으로는
function solution(elements) {
const set = new Set();
const n = elements.length;
// elements 배열에 시작위치를 알려주는 for문
for(let i=0; i<n; i++){
// 합계 저장
let sum = 0;
// 연속 부분 수열 시작위치부터 i+n까지 순회
// ex) 0에서 시작하면 4까지, 4에서 시작하면 8까지
for(let j=i; j<i+n; j++){
// % 인덱스를 순환하면서 sum에 더함
sum += elements[j%n];
set.add(sum)
}
}
return set.size
}
시작하는 point 를 잡고 거기서 부터 배열의 갯수 만큼 하나씩 더하면서 sum 을 하면된다. 말그대로 완전 탐색이다. 이런경우 사실 금방 풀수 있었다.
하지만 슬라이딩 윈도우를 사용해서 풀어보고 싶어서 조금 고생했다..;; 근데
결국 슬라이딩 윈도우 같지만 아닌것 같은 게 되고 말았다 . 다음부터는 그냥.. 빨리 푸는 방식으로 풀어야되겠다.
function solution(elements) {
var answer = 0;
var new_elements= elements.concat(elements);
var total_count=0;
var point=0;
var copy_totl=0;
var new_Ss= new Set();
for(var i=0; i<new_elements.length; i++){
total_count+=new_elements[i];
if(i>=elements.length){
total_count-=new_elements[point];
point+=1;
}
copy_totl=total_count;
for(var ii=i-(elements.length-1); ii<i; ii++){
if(i-ii<0){
continue;
}
else{
copy_totl-=new_elements[ii];
new_Ss.add(copy_totl);
}
}
}
return new_Ss.size;
}

근데 이상적인 답은 아닌듯 하다. 너무 복잡하다.