Coding Test/JavaScript

[프로그래머스 / JS] 연속부분수열 합의 갯수

ea_jung 2023. 7. 16. 23:54

으 어렵다..  연속적인 원소를 원하는 만큼 뽑으려면 어떻게 짜야 할까. 뽑아서 더하고 배열에 넣고 new Set() 해서 중복된거 제거하면 될 거 같은데. 다중 for문은 시간복잡도가 너무 커질거 같고..

아! 슬라이딩 윈도우 방법 써보자!

 

function solution(elements) {
    const set = new Set();
    const L = elements.length

    for(let size = 1; size <= L; size++) {
        let right = 0;
        let sum = 0;
        
        for(let left = 0; left < L; left++) {
            if(left === 0) {
                while(right < size) {
                    sum += elements[right++]
                }
            } else {
                sum -= elements[left - 1];
                if(right === L) {
                    right = 0
                }
                sum += elements[right++]
            }
            set.add(sum)
        }
    }
    
    return set.size
}

원형으로 돌다보니까 left, right 변수명이 조금 애매하다. 

그래도 이중 for문 사용해서 시간복잡도 O(N2) 걸린다. 

 

반응형