본문 바로가기
기초다지기/JS 코딩테스트

javaScript 부분 배열 합 계산

by 김빵그 2023. 12. 26.

문제 

원형 수열에서 가능한 서로 다른 부분 수열의 합을 계산하는 방법

풀이 

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;
}
  • ele 배열 생성시 slice를 이용하여 배열을 더욱 효율적으로 확장