[JS] 연속 부분 수열 합의 개수

yoon·2022년 10월 18일

코딩테스트

목록 보기
4/8

처음과 끝이 이어진 원형 수열의 연속 부분 수열 합으로 만들 수 있는 수의 개수를 return 해야하는 문제이다.

function solution(elements) {
    var answer = elements.slice()
    let result = elements.slice()
    
    for (let i = 1; i < elements.length; i++) {
        result = result.map((item, index) => i + index >= elements.length ? item + elements[i + index - elements.length] : item + elements[index + i])
        answer.push(...result)
    }
    return [...new Set(answer)].length;
}

for 문을 통해 원형 수열에서 원소 n개의 값을 골라 더하도록 했다.
여기서 내가 사용한 방법은 원소 1개를 골랐을 때의 합은 원형 수열 그대로의 값이다. 원형 수열부터 2개를 골랐을 때는 본인의 현재 인덱스보다 +1 된 원소를 더하고 그 더한 값들을 다시 저장했다. 그리고 3개를 골랐을 때는 현재 인덱스보다 +2된 원소를 더하고 저장하는 방식을 반복했다. 만약 주어진 배열의 길이보다 인덱스가 넘어가면 i + index - elements.length로 처음부터 매기도록 하였다.


근데 결과가 썩 좋지는 않다 개선해봐야겠다

profile
얼레벌레 개발자

0개의 댓글