프로그래머스 LEVEL 2(연속 부분 수열 합의 개수)

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2022-10-15

  • 해결 방법 :
    • circular를 위해 elements 뒤에 elements를 붙임 - sequence (마지막 인덱스 제외)
    • elements의 길이만큼 반복하며 (1, 2, …, n) slice()를 사용해 sequence를 잘라 합 push()
    • 마지막 인덱스는 한번만 수행하면 되기 때문에 for문 밖에서 따로 push()
    • 중복 제거를 위해 Set()으로 변경 후 size 반환
  • 회고 :
    • Set에 바로 add()
  • 코드

    function solution(elements) {
        const answer = [];
        const sequence = [...elements, ...elements.slice(0, -1)];
            
        for (let i = 1; i < elements.length; i++) {
            for (let j = 0; j < elements.length; j++) {
                answer.push(sequence.slice(j, j + i).reduce((acc, cur) => acc + cur, 0));
            }
        }
        answer.push(elements.reduce((acc, cur) => acc + cur, 0));
            
        return (new Set(answer)).size;
    }
    
  • 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges