자바스크립트 코딩테스트 '합이 같은 부분집합'

릿·2021년 9월 9일
0

코딩테스트

목록 보기
6/27

N개의 원소로 이루어진 자연수 집합이 있다. 이를 두개의 집합으로 나누었을 때, 두개의 합이 같은 부분집합이 있으면 YES, 없으면 NO를 반환하라.
둘로 나뉘는 두 부분집합은 서로소집합이고, 두 부분집합을 합하면 원래의 집합이 되어야 한다.
**서로소집합 : 공통원소가 없는 집합

  1. 내 풀이
    ...그냥 부분집합 구하는 것까지만 구현했다.
    수고했다ㅋㅋㅋㅋ

  2. 쌤 풀이 :
    DFS함수의 매개변수를 L과 sum으로 받고, L이 arr.length에 도달하면
    total변수에서 sum을 뺀 것과 sum이 같은지 확인한다.
    flag변수를 사용해서 브레이크문도 만듬.

function solution(arr){
    let answer="NO", flag=0; // flag변수 : 답을 찾으면 브레이크 시키려고 만든 변수
    let total=arr.reduce((a, b)=> a+b, 0); // reduce함수 : 합계 구하는 함수.
    let n=arr.length;
    function DFS(L, sum) {
        if (flag) return; // flag에 값이 있으면 브레이크.
        if (L===n) {
            if((total-sum)===sum) {
                answer="YES";
                flag=1;
            }
        }
        else {
            DFS(L+1, sum+arr[L]); 
            DFS(L+1, sum);
        }
    }
    DFS(0, 0);
    return answer;

}

let arr=[1, 3, 5, 6, 7, 10];
console.log(solution(arr));
profile
새로운 도전과 재미를 추구하는 프론트엔드 개발자

0개의 댓글