[프로그래머스 - Level2 ]-연속 부분 수열 합의 개수

정대만·2023년 6월 27일

코딩테스트

목록 보기
4/51
post-thumbnail


연속된 배열에서 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;
}


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

profile
안녕하세요

0개의 댓글