๐ section08 - 15 - ์๋ค์ ์กฐํฉ
N
๊ฐ์ ์ ์๊ฐ ์ฃผ์ด์ง๋ฉด ๊ทธ ์ซ์๋ค ์ค K
๊ฐ๋ฅผ ๋ฝ๋ ์กฐํฉ์ ํฉ์ด ์์์ ์ ์ M
์ ๋ฐฐ์์ธ ๊ฐ์๋ ๋ช ๊ฐ์ธ์ง ์ถ๋ ฅํ๋ ๋ฌธ์ ๋ค. ์๋ฅผ ๋ค๋ฉด, 5๊ฐ์ ์ซ์ arr=[2, 4, 5, 8, 12]
๋ก ์ฃผ์ด์ง๋ฉด 3
๋ฅผ ๋ฝ๋ ์กฐํฉ์ ํฉ์ด 6
์ ๋ฐฐ์์ธ ๊ฐ์ [2, 4, 12] (18)
, [ 4, 8, 12 ] (24)
๋ก ์ด 2๊ฐ๊ฐ ์๋ค.
์ด ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์ n
๊ฐ์ ์ ์๋ฅผ ๋ฝ๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์(์กฐํฉ)๋ฅผ ๊ตฌํ๊ณ , ์กฐํฉ์ ํฉ์ m
์ผ๋ก ๋๋ ๋๋จธ์ง๊ฐ 0์ธ ๊ฐ์ ์ฐพ์ผ๋ฉด ๋๋ค. ์กฐํฉ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ค์์ ์ฐธ๊ณ ํ์.
๋ด๊ฐ ๋ฌธ์ ๋ฅผ ํ ๋๋ DFS
ํจ์์ ์ธ์๋ฅผ L, s
๋ง ๋๊ธฐ๊ณ L===k
์ผ ๋ reduce
ํจ์๋ฅผ ์ด์ฉํ์ฌ ๋ํ๋๋ฐ, ๊ทธ๊ฒ๋ณด๋จ DFS
์ sum
์ธ์๋ฅผ ํ๋ ๋ ๋๊ฒจ์ L
์ด ์ฌ๋ผ๊ฐ ๋๋ง๋ค ํ์ฌ ๊ฐ์ ๋ํด์ฃผ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๊ฐ ๋ณต์ก๋๋ฅผ ๋จ์ถ์ํฌ ์ ์๋ค. ์ด๊ฒ๊ณผ ๊ถ๊ธํด์ ์ ์๋๊ป ์ง๋ฌธ์ ๋จ๊ฒผ๋๋ฐ ์น์ ํ๊ฒ ๋ต๋ณํด์ฃผ์
จ๋ค.
๋ํ, ์กฐํฉ์ ํตํด ๋ฝ์ ๊ฐ์ ๋ณด๊ณ ์ถ๋ค๋ฉด `k`๋งํผ ๋น ๋ฐฐ์ด์ ์ ์ธํด์ `temp[L] = arr[i]`๋ก ํ์ธํด์ฃผ๋ฉด ๋๋ค.
์ฌ๋ด์ผ๋ก ๋ถ๋ถ์งํฉ, ์์ด, ์กฐํฉ์ด ํท๊ฐ๋ฆด ๋๊ฐ ์์๋๋ฐ, ๋๋ฆ ๊ธฐ์ค์ ์ธ์์ ๊ตฌ๋ณํ๊ณ ์๋ค.
1. ๋ถ๋ถ์งํฉ: 1๋ถํฐ N๊น์ง ๊ฐ์ ๋ชจ๋ ํฌํจํ๊ฑฐ๋, ํ๊ฐ์ฉ๋ง ํฌํจํ๊ฑฐ๋, ์ผ๋ถ๋ง ํฌํจํ๋ ๊ณ์ฐ์ด ํ์ํ ๋
2. ์์ด: ์ผ๋ ฌ๋ก ๋์ดํ ๋ (๋ค์ง์๊ฒ์ ์ทจ๊ธํ๋ค.)
3. ์กฐํฉ: ๋ฝ๋ ๋ฐฉ๋ฒ์ ์ (๋ค์ง์๊ฒ์ ์ทจ๊ธํ์ง ์๋๋ค.)
let n = 5;
let k = 3;
let arr = [2, 4, 5, 8, 12];
let m = 6;
console.log(solution(n, k, arr, m));
function solution(n, k, arr, m){
let cnt = 0;
let temp = Array.from({length: k}, () => 0);
function DFS(L, s, sum){
if (L === k && sum % m === 0) cnt++;
if (L === k) console.log(temp, sum); // ์กฐํฉ ํ์ธ์ฉ ์ฝ๋
else{
for (let i=s; i<n; i++){
temp[L] = arr[i] // ์กฐํฉ ํ์ธ์ฉ ์ฝ๋
DFS(L+1, i+1, sum+arr[i]);
}
}
}
DFS(0, 0, 0);
return cnt;
}
[ 2, 4, 5 ] 11
[ 2, 4, 8 ] 14
[ 2, 4, 12 ] 18
[ 2, 5, 8 ] 15
[ 2, 5, 12 ] 19
[ 2, 8, 12 ] 22
[ 4, 5, 8 ] 17
[ 4, 5, 12 ] 21
[ 4, 8, 12 ] 24
[ 5, 8, 12 ] 25
2
๋๊ธ