N개의 원소로 이루어진 자연수 집합이 있다. 이를 두개의 집합으로 나누었을 때, 두개의 합이 같은 부분집합이 있으면 YES, 없으면 NO를 반환하라.
둘로 나뉘는 두 부분집합은 서로소집합이고, 두 부분집합을 합하면 원래의 집합이 되어야 한다.
**서로소집합 : 공통원소가 없는 집합
내 풀이
...그냥 부분집합 구하는 것까지만 구현했다.
수고했다ㅋㅋㅋㅋ
쌤 풀이 :
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));