๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (Dynamic Programming)๋.
์์์ ๊ธ์๋ฅผ ๋ฐ์ dp ๋ผ๊ณ ๋ ๋ถ๋ฆฌ๊ณ ๋์ ๊ณํ๋ฒ์ด๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
"ํน์ ๋ฒ์๊น์ง์ ๊ฐ์ ๊ตฌํ๊ธฐ ์ํด์ ๊ทธ๊ฒ๊ณผ ๋ค๋ฅธ ๋ฒ์๊น์ง์ ๊ฐ์ ์ด์ฉํ์ฌ ํจ์จ์ ์ผ๋ก ๊ฐ์ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ"
์๊ณ ๋ฆฌ์ฆ์์ ์ฃผ์ด์ง ๋ฌธ์ ์ ์ ๊ทผํ๊ธฐ์ํด ์ฌ๋ฌ๊ฐ์ ํ์๋ฌธ์ ์ ํ์ด๋ฅผ ๋ง๋ค๊ณ ,
๊ทธ ํ์ด๋ฅผ ๋ฐํ์ผ๋ก ์งํํ์ฌ ์ต์ข
์ ์ธ ๋ฌธ์ ์ ๋๋ฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ์๊ฐ์ ํ๋ฉด ๋๋ค๊ณ ํฉ๋๋ค.
์์ ๊ฐ์ ์ค๋ช
์ผ๋ก๋ dp๋ฅผ ์ฒ์ ์ ํ๋ ์ฌ๋์์๋ ํฌ๊ฒ ์๋ฟ์ ์ ์๋ ์ด์ผ๊ธฐ๋ผ์ ๊ฐ๋จํ๊ฒ ์ด์ผ๊ธฐ๋ฅผ ํ์๋ฉด
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ ํ์์ ์ฐพ์๋ธ ํ ์ ํ์์ ๋ฐํ์ผ๋ก ํ์๋ฌธ์ ๋ถํฐ ์ฐจ๋ก๋ก ๊ตฌํด๋๊ฐ์ ์ต์ข
์ ์ธ ๋ต์๋์ถํด๋ด๋ ํํ์ ์๊ณ ๋ฆฌ์ฆ
์ผ๋ก ์ค๋ช ์ ํ ์ ์๋ค.
๊ทธ๋๋ ์์ ์์ด๋ ์ดํดํ๊ธฐ๊ฐ ํ๋ค์ด ์์ ๋ฅผ ์๋ฅผ ๋ค์ด ์ค๋ช ์ ํด๋ณด๊ฒ ์ต๋๋ค.
์์
ํผ๋ณด๋์น์ ์
dp๋ฌธ์ ์ค์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ๋ฌธ์ ๋ก ๋ง์ด ์ธ๊ธ์ด ๋๋ ๋ฌธ์ ์ค์ ํ๋์ธ๊ฑฐ ๊ฐ์์ ๊ฐ์ ธ์์ต๋๋ค.
ํผ๋ณด๋์น์ ์๋ ์ฒซ์งธ ๋ฐ ๋์งธ ํญ์ด 1์ด๋ฉฐ ๊ทธ ๋ค์ ๋ชจ๋ ํญ์ ๋ฐ๋ก ์ ๋ ํญ์ ํฉ์ธ ์์ด์ ๋๋ค. ์ฆ
1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ...
ํ์์ผ๋ก 1 + 1 = 2, 1 + 2 = 3.. ํํ์ฒ๋ผ ๊ณ์ํด์ ์ด์ ์ ๊ฐ์ ์ฐธ์กฐํด์ ๋ค์์ ๊ฐ์ ๋ง๋๋ ์์ด๋ผ๊ณ ์๊ฐ์ ํ ์ ์๋๋ฐ
์์ ์์ ์ ํ์์ผ๋ก ํํ์ ํด๋ณด๋ฉด
ํ์์ผ๋ก ์ ํ์์ ์ธ์ธ ์ ์๊ณ , ํด๋น์ ํ์์ ์ฝ๋๋ก ๋์ ์ ํด๋ณด๋ฉด
int f(int n) {
if(n == 0) return 0;
if(n == 1) return 1;
if(n == 2) return 1;
return f(n) = f(n-1) + f(n-2);
}
ํ์์ผ๋ก ์์ ์ธ์ธ ์ ์๋ค.
์ฆ ์์ ์ฝ๋๋ฅผ ํตํด์ ํผ๋ณด๋์น์ ์๋ผ๋ ์์ด์ ์ด์ ์ ๊ตฌํด์ง ๊ฐ์ ์ฐธ์กฐํ์ฌ ํ์ฌ์ ๊ฐ์ ๋์ถํด๋ด๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ dp์์ ์ฌ์ฉํ๋ ๋ฐฉ์์ธ ํ์๋ฌธ์ ๋ถํฐ ์ฐจ๋ก๋ก ๊ตฌํด๋๊ฐ์ ์ต์ข ์ ์ธ ๋ต์ ๋์ถํด๋ด๋ ๋ฐฉ์๊ณผ ๊ฐ๋ค๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค.
ํด๋น ๋ฐฑ์ค๋ฌธ์
2747๋ฒ: ํผ๋ณด๋์น ์
ํผ๋ณด๋์น ์๋ 0๊ณผ 1๋ก ์์ํ๋ค. 0๋ฒ์งธ ํผ๋ณด๋์น ์๋ 0์ด๊ณ , 1๋ฒ์งธ ํผ๋ณด๋์น ์๋ 1์ด๋ค. ๊ทธ ๋ค์ 2๋ฒ์งธ ๋ถํฐ๋ ๋ฐ๋ก ์ ๋ ํผ๋ณด๋์น ์์ ํฉ์ด ๋๋ค. ์ด๋ฅผ ์์ผ๋ก ์จ๋ณด๋ฉด Fn = Fn-1 + Fn-2 (n ≥ 2)๊ฐ
www.acmicpc.net
ํด์ฌ
์๋ ๋งํฌ๋ฅผ ํตํด dp์ ๋ค๋ฅธ ์์ ๋ ํ์ธํด ๋ณผ ์ ์๋ค.
[๋ฐฑ์ค] 14501๋ฒ - ํด์ฌ, 15486๋ฒ - ํด์ฌ 2 (C++)
๋ฌธ์ ์๋ด์์ผ๋ก ์ผํ๊ณ ์๋ ๋ฐฑ์ค์ด๋ ํด์ฌ๋ฅผ ํ๋ ค๊ณ ํ๋ค. ์ค๋๋ถํฐ N+1์ผ์งธ ๋๋ ๋ ํด์ฌ๋ฅผ ํ๊ธฐ ์ํด์, ๋จ์ N์ผ ๋์ ์ต๋ํ ๋ง์ ์๋ด์ ํ๋ ค๊ณ ํ๋ค. ๋ฐฑ์ค์ด๋ ๋น์์๊ฒ ์ต๋ํ ๋ง์ ์๋ด
jun-13.tistory.com
'Algorithm > ๊ฐ๋ ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (DP) - ์ ๊ทผ ๋ฐฉ๋ฒ (0) | 2023.08.15 |
---|