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

김도현님의 프로필 이미지
김도현

작성한 질문수

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

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

코드 리뷰 부탁드립니다!!!

작성

·

149

0

4번의 부분집합 구하기를 이용해서 코드를 구현해보았습니다.

반례나 고칠 부분이 있다면 조언 부탁드립니다!!

function solution(arr){
                let answer="NO", flag=0;
                let sum = arr.reduce((a,b)=>a+b);
                let ch = Array.from({length:arr.length+1}, ()=>0);
                function dfs(n) {
                    if(flag) return;
                    if(n === arr.length) {
                        let arr1 = [];
                        for(let i = 0; i < arr.length; i++) {
                            if(ch[i] === 1) arr1.push(arr[i]);
                        }
                        if(arr1.length > 0) {
                            let arr1_sum = arr1.reduce((a,b)=>a+b);
                            if(arr1_sum === sum - arr1_sum) {
                                answer = "YES";
                                flag = 1
                            }
                        }
                    } else {
                        ch[n] = 1;
                        dfs(n+1);
                        ch[n] = 0;
                        dfs(n+1);
                    }
                }
                dfs(0);
                return answer;
            }

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

답변 1

0

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

안녕하세요^^

매 부분집합이 완성될 때마다 reduce로 합을 구하면 조금 비효율적입니다.

영상의 방법처럼 합을 재귀함수의 매개변수로 계산하는게 좋습니다.

김도현님의 프로필 이미지
김도현

작성한 질문수

질문하기