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

@bbearcookie · April 14, 2023 · 2 min read

문제

https://school.programmers.co.kr/learn/courses/30/lessons/131701

아이디어

  1. 길이가 1인 연속 부분 수열부터 시작해서 길이가 elements.length 인 연속 부분 수열까지 추출한다.
  2. 각 연속 부분 수열에 들어 있는 모든 원소의 값을 더한뒤 그 값을 중복을 허용하지 않는 Set 자료구조에 넣는다.
  3. 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;
}
@bbearcookie
Frontend Developer