728x90
๐ section08 - 5 - ํฉ์ด ๊ฐ์ ๋ถ๋ถ์งํฉ(DFS: ์๋ง์กด ์ธํฐ๋ทฐ)
N
๊ฐ์ ์์๋ก ๊ตฌ์ฑ๋ ์์ฐ์ ์งํฉ์ด ์ฃผ์ด์ง๋ฉด, ์ด ์งํฉ์ ๋ ๊ฐ์ ๋ถ๋ถ์งํฉ์ผ๋ก ๋๋ ๋ ๋ ๋ถ๋ถ์งํฉ์ ์์์ ํฉ์ด ์๋ก ๊ฐ์ ๊ฒฝ์ฐ๋ฉด YES, ๊ทธ๋ ์ง ์์ผ๋ฉด NO๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๋ฌธ์ ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์์๋๋ฅผ ๊ทธ๋ ค์ ์ดํดํ๋ ๊ฒ์ด ๊ฐ์ฅ ๋น ๋ฅด๋, ์
๋ ฅ ์์ ๊ฐ n=6
์ด๋ฏ๋ก(์ด 64๊ฐ์ ๊ฐ์ง๋ฅผ ๊ทธ๋ ค์ผํจ) ๋ฐ๋ก ์์๋๋ฅผ ๊ทธ๋ฆฌ์ง ์๊ณ ๊ทธ๋ฆผ์ฒ๋ผ ๊ทธ๋ฆฌ๋ฉด ๋๋ค.
- ์ด๋ค ๋ถ๋ถ์งํฉ์ ํฉ์ด ๊ฐ์์ง๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ๋ถ๋ถ์งํฉ์ด ๋์ฌ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ชจ๋ ๊ตฌํ๋ค.
n=6
์ด๋ฏ๋ก ์ด ๋ถ๋ถ์งํฉ์ ๊ฐ์๋2^6=64
๊ฐ ๋์จ๋ค. - ํฉ์ด ๊ฐ์ ๋ถ๋ถ์งํฉ์ ์ฐพ์ ๋, A, B ๋ถ๋ถ์งํฉ์ ๋ชจ๋ ๊ตฌํ์ง ์๊ณ ํ ๋ถ๋ถ์งํฉ๋ง ๊ตฌํ๊ณ ๋์
sum(๋ฐฐ์ด) - aSum(ํ ๋ถ๋ถ์งํฉ) = aSum
์ด๋ฉดaSum = bSum
์ด ๋๋ค. - 11๋ฒ์งธ ์ฝ๋์
edgeCut
๋ฐฉ์์ ์ ์ฉํ๋๋ฐ,edgeCut
์ด๋ ๋ฌธ์ ์์ ์ฃผ์ด์ง ์ถ๋ ฅ์ ๋ง์กฑํ์ฌ ๋ ์ด์ ๊ณ์ฐ ํ ํ์ ์์ ๋ ๋จ์ ์ฌ๊ท๋ฅผ ๊ฑฐ์น์ง ์๊ณreturn
ํ์ฌ ์ถ๋ ฅํ๋ ๋ฐฉ์์ด๋ค. ๋ถ ํ์ํ ๊ณ์ฐ์ ์ค์ฌ ์๊ฐ์ ์กฐ๊ธ์ด๋๋ง ๋ ๋จ์ถํ ์ ์๋ ์ฅ์ ์ด ์๋ค.
728x90
let n = 6;
let arr = [1, 3, 5, 6, 7, 10];
console.log(solution(n, arr));
function solution(n, arr){
let total = arr.reduce((prev, cur) => prev+cur);
let flag = false;
function DFS(L, sum){
if (flag) return; // edge cut
if (L === n){
if (total-sum===sum) flag = true
}else{
DFS(L+1, sum+arr[L]);
DFS(L+1, sum);
}
}
DFS(0, 0);
return flag ? "YES" : "NO";
}
๋ฐ์ํ
๋๊ธ