ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ ํด๋น ๊ณต์์ด ์ด๋ป๊ฒ ์ฑ๋ฆฝ์ด ๋๋์ง ์ดํด ๋ณด์. ์๋ฅผ ๋ค์ด 5๊ฐ์ ๊ฒฝ์ฐ์ ์ค 3๊ฐ๋ฅผ ๋ฝ๋๋ค๊ณ ๊ฐ์ ํด ๋ณด์.
์ด๋ ๊ฐ์ฅ ํฐ ๊ฐ์ธ 5(n)๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ดค์ ๋, ์กฐํฉ์ ๊ตฌํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ ํฌ๊ฒ 5๋ฅผ ํฌํจํ ๊ฒฝ์ฐ์ 5๋ฅผ ํฌํจํ์ง ์์ ๊ฒฝ์ฐ์ธ 2๊ฐ์ง๋ก ๋๋๋ค.
5๋ฅผ ํฌํจํ ๊ฒฝ์ฐ์๋ ๋จ์ 4๊ฐ์ ๊ฒฝ์ฐ์ ์ค ๋๋จธ์ง ์๋ฆฌ 2๊ฐ(r-1)๋ฅผ ๋ฝ๊ณ 5๋ฅผ ํฌํจํ์ง ์์ ๊ฒฝ์ฐ์๋ ๋จ์ 4๊ฐ ๊ฒฝ์ฐ์ ์ค ๋๋จธ์ง 3๊ฐ(r)๊ฐ๋ฅผ ๋ฝ์ ๊ฒ์ด๋ค.
์ฝ๋
function solution(n, r) {
let answer = 0;
function DFS(n , r) {
if(n === r || r === 0) return 1; //๋์ฌ ์ ์๋ ๊ฐ์ฅ ์์ ๊ฒฝ์ฐ์ 1์ ๋ฐํ
else return DFS(n - 1, r - 1) + DFS(n - 1, r)
}
answer = DFS(n, r);
return answer;
}
console.log(solution(5 , 3));
๋ฉ๋ชจ์ด์ ์ด์
๋ค์ ์กฐํฉ์ ํธ๋ฆฌ๋ฅผ ์ดํด๋ณด์.
ํธ๋ฆฌ์์ ๊น์ด ํ์์ ํ๋ค ๋ณด๋ฉด ์ ์ด๋ฏธ์ง์์ ํ์ํ ๋ฐ์ ๊ฐ์ด ๋๊ฐ์ ์กฐํฉ์๋ฅผ ๊ตฌํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋ฏธ ํด๋น ์กฐํฉ์๋ ์ด์ ํ์์์ ๊ตฌํ๊ธฐ ๋๋ฌธ์ ์ด ๊ฐ์ ๊ตฌํ๊ธฐ ์ํด ์ฌ๊ท๋ฅผ ํ๋ฒ ๋ ํ๋ ๊ฒ์ ๋ฌด์ฒ ๋นํจ์จ์ ์ด๋ค.
์ง๊ธ์ ๊ตฌํด์ผ ๋ ๊ฒฝ์ฐ์๊ฐ ์ ์ด์ ์๊ด์ ์์ผ๋ ๊ทธ ๊ฐ์ด ์ปค์ง ๊ฒฝ์ฐ์๋ ์ฐ์ฐ์ ๋ฐ๋ฅธ ์๊ฐ๋ณต์ก๋๊ฐ ์ปค์ง๊ฒ ๋๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ์ด์ ์ด์ ์
์ฌ์ฉํ๋ ๊ฒ์ด ํจ์จ์ ์ด๋ค.
๋ฉ๋ชจ์ด์ ์ด์ (memoization)์ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ด ๋์ผํ ๊ณ์ฐ์ ๋ฐ๋ณตํด์ผ ํ ๋, ์ด์ ์ ๊ณ์ฐํ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํจ์ผ๋ก์จ ๋์ผํ ๊ณ์ฐ์ ๋ฐ๋ณต ์ํ์ ์ ๊ฑฐํ์ฌ ํ๋ก๊ทธ๋จ ์คํ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๋ ๊ธฐ์ ์ด๋ค. ๋์ ๊ณํ๋ฒ์ ํต์ฌ์ด ๋๋ ๊ธฐ์ ์ด๋ค.
function solution(n, r) {
let answer = 0;
let dy = Array.from(Array(35), () => Array(35).fill(0)); //๋ฉ๋ชจ์ด์ ์ด์
์ ์ํด ๊ฐ ์กฐํฉ์๋ฅผ ์ ์ฅํ๊ธฐ ์ํ 2์ฐจ์ ๋ฐฐ์ด ์์ฑ
function DFS(n , r) {
if(dy[n][r] !== 0) return dy[n][r]; //๋ง์ฝ์ ํด๋น ์กฐํฉ์ด ์ด์ ํ์์์ ๊ตฌํ์ ๊ฒฝ์ฐ์๋ ๋๋ ํ์์ ํ์ง ์๊ณ ๋ฐฐ์ด์ ์ ์ฅ๋์ด ์๋ ๊ฐ์ ๋ฐํ
if(n === r || r === 0) return 1;
else return dy[n][r] = DFS(n - 1, r - 1) + DFS(n - 1, r) //๊ฐ ์กฐํฉ์ ๊ฒฝ์ฐ์๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์
}
answer = DFS(n, r);
return answer;
}
console.log(solution(33 , 19));
'์๊ณ ๋ฆฌ์ฆ > ํ๊ทธ ๋ณ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์์ด ์ถ์ธกํ๊ธฐ (0) | 2021.08.08 |
---|---|
ํน์ ๊ฐ์ ๋ง์กฑํ๋ ์กฐํฉ ๊ตฌํ๊ธฐ(ps.ํ์ด์ฌ์ ์์..) (0) | 2021.08.08 |
์์ด ๊ตฌํ๊ธฐ (0) | 2021.08.07 |
[DFS-Cut Edge]๋์ ๊ตํ (0) | 2021.08.06 |
[๋ค์ค for๋ฌธ๊ณผ ์ฌ๊ท์ ์ฐจ์ด]์ค๋ณต์์ด ๊ตฌํ๊ธฐ (0) | 2021.08.06 |