Algorithm/์ธํ”„๋Ÿฐ(inflearn)

[ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript) ] section08 - 15 - ์ˆ˜๋“ค์˜ ์กฐํ•ฉ

YWTechIT 2021. 10. 5. 12:07
728x90

๐Ÿ“ 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. ์กฐํ•ฉ: ๋ฝ‘๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜ (๋’ค์ง‘์€๊ฒƒ์€ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.)

 

728x90

 

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
๋ฐ˜์‘ํ˜•