๐ section10 - 1 - ๊ณ๋จ ์ค๋ฅด๊ธฐ(DP)
์ด๋ฒ ์น์
์ ๋์ ๊ณํ ํ๋ก๊ทธ๋๋ฐ์ธ(DP)์ ๋ํด์ ๋ฐฐ์ด๋ค. (๋ทํ๋ฆญ์ค DP ๊ฟ์ผ ๐)
DP
๋ฌธ์ ๋ ์ง๊ด์ ์ผ๋ก ๋ถ์ํ๊ธฐ ์ด๋ ค์ด๋ฐ, ์ด ๊ฐ์ ํค์ฐ๋ ค๋ฉด ์ ์๋๊ป์๋ ์ญ์ ์์น๊ธฐ ์ฆ, ๋ง์ ๋ฌธ์ ๋ฅผ ํ์ด๋ด์ผ ํ๋ค๊ณ ํ์
จ๋ค. DP
๋ฌธ์ ๋ค์ ํน์ง์ ์ดํด๋ณด์.
DP
๋ ํฐ ๋ฌธ์ ๋ฅผ ํ ๋ฒ์ ํ๊ธฐ๋ณด๋ค๋ ์ง๊ด์ ์ผ๋ก ์ ์ ์๋ ๋จ์๋ก ์๊ฒ ์ชผ๊ฐ ๋ค.- ์์ ๋จ๊ณ๋ถํฐ ๋ต์
dp
์ ์ ์ฅํ๊ณ , ๋ฒ์๋ฅผ ์ ์ฐจ ๋ํ๊ฐ๋ค. ์ด๋, ์์์ ์ฌ์ฉํ ๊ฐ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค. - ์ง๊ด์ ์ผ๋ก ์ ์ ์๋ ๊ฐ์
dp
์ ์ ์ฅํ๋๋ฐ ๋ณดํต์dp[1]~dp[2]
์ ๋์ด๊ณ ๋ง์ผ๋ฉดdp[0]~dp[3]
์ ๋๊น์ง ์ ์ฅํ๋ค. - ์์ ๋จ๊ณ๋ถํฐ ๊ฒฝ์ฐ์ ์๋ฅผ ํ๋ฒ ์ธ๋ณธ๋ค. (์ดํ์๋ ์ด๋ป๊ฒ ํ์ฉํ ์ง ๊ณ ๋ฏผํ๊ธฐ!)
- ์ด์ ๋จ๊ณ์์ ๊ด๊ณ์(์ ํ์)์ ๋ง๋ค์ด๋ณด์. ์๋ฅผ ๋ค๋ฉด ๋ฐ๋ก ์์ ํญ์ 3์ ๋ํ๋๋ ๋ต์ด ๋๋ ๊ท์น(d[i]=d[i-1]+3) ๋ฑ
๋ฌธ์ : ์ฒ ์๋ ๊ณ๋จ์ ์ค๋ฅผ ๋ ํ ๋ฒ์ ํ ๊ณ๋จ ๋๋ ๋ ๊ณ๋จ์ฉ ์ฌ๋ผ๊ฐ๋ค. ๋ง์ฝ, ์ด 4๊ณ๋จ์ ์ค๋ฅธ๋ค๋ฉด ๊ทธ ๋ฐฉ๋ฒ์ ์๋ 1+1+1+1
, 1+1+2
, 1+2+1
, 2+1+1
, 2+2
๋ก ์ด 5๊ฐ์ง์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด N
๊ณ๋จ์ผ ๋ ์ฒ ์๊ฐ ์ฌ๋ผ๊ฐ ์ ์๋ ๋ฐฉ๋ฒ์ ์๋ ๋ช ๊ฐ์ง์ธ๊ฐ?
N
๊ณ๋จ์ ์ฌ๋ผ๊ฐ ๋๋ฅผ ๋ฐ๋ก ์๊ฐํ์ง ๋ง๊ณ ๊ณ๋จ์ 1๊ฐ ์ค๋ฅผ ๋, 2๊ฐ ์ค๋ฅผ ๋์ฒ๋ผ ๋ฎ์ ๋จ๊ณ๋ฅผ ๋จผ์ ์๊ฐํด๋ณด์. ์ฒ ์๊ฐ 1๊ณ๋จ์ ์ค๋ฅผ ๋ ๊ฒฝ์ฐ์ ์๋ 1๊ฐ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด 2๊ณ๋จ์ ์ค๋ฅผ ๋๋ ์ด๋จ๊น? ํ ์นธ์ฉ ์ค๋ฅด๋ ๋ฐฉ๋ฒ๊ณผ ๋ ์นธ์ ํ ๋ฒ์ ์ค๋ฅด๋ ๋ฐฉ๋ฒ ์ด 2๊ฐ์ง๊ฐ ์๋ค. ์ด๋ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
๊ทธ๋ ๋ค๋ฉด 3๋ฒ์งธ ๊ณ๋จ์ ์ค๋ฅผ ๋๋ ์ด๋จ๊น? 3๋ฒ์งธ ๊ณ๋จ์ ์ค๋ฅด๋ ๋ฐฉ๋ฒ์ 1๊ณ๋จ์์ ํ๋ฒ์ ์ฌ๋ผ๊ฐ๋ ๋ฐฉ๋ฒ๊ณผ 2๊ณ๋จ์์ ํ ์นธ ์ฌ๋ผ๊ฐ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ์ฆ, 1๊ณ๋จ์์ ์ค๋ฅด๋ ๊ฒฝ์ฐ์ ์ + 2๊ณ๋จ์์ ์ค๋ฅด๋ ๊ฒฝ์ฐ์ ์๊ฐ ๋๋ค. ํ๋๋ง ๋ ํด๋ณด์. 4๋ฒ์งธ ๊ณ๋จ์ ์ฌ๋ผ๊ฐ๋ ๋ฐฉ๋ฒ์ ์ด๋จ๊น? ์ผ์ผ์ด ์ธ๋ณด๋ ๊ฒ๋ ๋ฐฉ๋ฒ์ด ๋ ์ ์๋ค. ํ์ง๋ง ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค. DP
๋ ์ด์ ์ ๊ฐ์ ์ฐธ๊ณ ํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ผ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก 2๊ณ๋จ์์ ํ ๋ฒ์ ์ฌ๋ผ๊ฐ๋ ๋ฐฉ๋ฒ๊ณผ 3๊ณ๋จ์์ ํ ์นธ์ฌ๋ผ๊ฐ๋ ๋ฐฉ๋ฒ์ ๋ํด์ฃผ๋ฉด ๋๋ค. ์ด๋ฅผ ์ฝ๋๋ก ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
let n = 7;
console.log(solution(n));
function solution(n){
let d = Array.from({length: n+1}, () => 0);
d[1] = 1;
d[2] = 2;
for (let i=3; i<=n; i++){
d[i] = d[i-1] + d[i-2];
}
return d[n];
}
๐๐ฝ 21
๐ก ๋ฒ์ธ: ๊ณ๋จ์ 3์นธ๊น์ง ์ค๋ฅผ ์ ์๋ค๋ฉด?
๋ง์ฝ์, ์ฒ ์๊ฐ ํ๋ฒ์ ๊ณ๋จ์ ์ค๋ฅผ ๋ 1์นธ, 2์นธ, 3์นธ๊น์ง ์ฌ๋ผ๊ฐ ์ ์์ ๋๋ ์ด๋ป๊ฒ ๊ตฌํ ๊น? ์ด์ ์ ๊ตฌํ๋ 1์นธ, 2์นธ์ ๋จ๊ฒจ๋๊ณ 3์นธ์ ์ด๋ป๊ฒ ์ฌ๋ผ๊ฐ์ง ๊ตฌํด๋ณด์. ํต์ฌ์ ์ธ ์ฌ๊ณ ๋ dp[3]
์ด ์ด๋์ ์๋์ง๋ฅผ ๋ ์ฌ๋ฆฌ๋ฉด ๋๋ค. dp[3]
์ dp[3-1]
์นธ์์ ๊ฐ๋ ๋ฐฉ๋ฒ๊ณผ dp[3-2]
์นธ์์ ๊ฐ๋ ๋ฐฉ๋ฒ์ด ์์ง๋ง, dp[3-3]
์นธ์์ ํ ๋ฒ์ 3์นธ์ ๊ฑด๋์ฌ ์๋ ์๋ค. ๋ฐ๋ผ์ dp[0]=1
์กฐ๊ฑด์ ์ถ๊ฐํด์ค์ผ ํ๋ค. ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
let n = 5;
console.log(solution(n));
function solution(n){
let dp = Array.from({length: n+1}, () => 0);
dp[0]=1;
dp[1]=1;
dp[2]=2;
for(let i=3; i<=n; i++){
dp[i]=dp[i-1]+dp[i-2]+dp[i-3];
}
return dp[n];
}
๐๐ฝ 13
๋๊ธ