인프런 커뮤니티 질문&답변

shut up and squat님의 프로필 이미지
shut up and squat

작성한 질문수

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

5. 합이 같은 부분집합(이진트리 DFS)

풀이 질문드립니다.

작성

·

133

0

function solution(arr) {
    let answer = 'NO', flag = 0;
    let chk = Array.from({ length: arr.length }, () => 0);
    function DFS(i) {
        let sum1 = sum2 = 0;
        if (flag) return;
        if (i === arr.length) {
            for (let i = 0; i < arr.length; i++) {
                if (chk[i] === 1) {
                    sum1 += arr[i];
                } else {
                    sum2 += arr[i];
                }
            }
            if (sum1 === sum2) {
                answer = 'YES';
                flag = 1;
            }
        } else {
            chk[i] = 1;//포함 
            DFS(i + 1);//미포함
            chk[i] = 0;
            DFS(i + 1);
        }
    }

    DFS(0);

    return answer;
}

let input = [3, 1, 5, 6, 7, 10];
console.log(solution(input));

이런식으로 짜봤는데 반복이 한번들어 감으로써 혹시 시간복잡도상 문제가 있을까요...? 

답변 1

1

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

매개변수로 sum을 만들어 넘기는 것이 좋습니다. 

부분집합이 만들어질때마다 반복문이 도는 구조는 시간복잡도상 안좋습니다.

shut up and squat님의 프로필 이미지
shut up and squat

작성한 질문수

질문하기