1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 ...
์ ์์ด์ฒ๋ผ n๋ฒ์งธ ํญ์ ์๊ฐ n-1 + n-2๋ก ๊ตฌ์ฑ๋๋ ์์ด์ ํผ๋ณด๋์น ์์ด์ด๋ผ ํ๋ค. (๋จ, n์ n<2)
ํผ๋ณด๋์น ์์ด์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ช๊ฐ์ง๊ฐ ์์ง๋ง ๊ทธ ์ค ์ฌ๊ทํจ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
int fibo(int n) {
if (n <= 2) return n;
return fibo(n - 1) + fibo(n - 2);
}
๋ค๋ง ์ ๋ฐฉ๋ฒ์ ๋๊ทธ๋ผ๋ฏธ์น ๋ถ๋ถ์ด ์ค๋ณต ๊ณ์ฐ๋๋ค.
๋ฐ๋ผ์ ๋ถํ์ํ ๊ณ์ฐ์ ๋ฐ๋ณตํ๊ธฐ ๋๋ฌธ์ n์ ๊ฐ์ด ์ปค์ง์๋ก ๋นํจ์จ์ ์ธ ๋ฌธ์ ๊ฐ ์๋ค.
int dp[] = {0, 1};
int solution(int n) {
if(n == 0) return 0;
else if (!dp[n])
dp[n] = solution(n - 1) + solution(n - 2);
return dp[n];
}
์ด ๋ฐฉ๋ฒ์ ์ ๊ฐ๋ ์ ์ ์ฉํ ์ฝ๋๋ก, 0, 1์ ๋ฏธ๋ฆฌ ์ ์ฅํด๋ dp๋ผ๋ ์ด๋ฆ์ ๋ฐฐ์ด์ ๊ฐ์ ๊ณ์ฐํ์ฌ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค.
n๋ฒ์งธ ๋ฐฐ์ด์๋ n๋ฒ์งธ ๊ฐ์ด ์ ์ฅ๋๋ค.
dp[n]์ด 0์ผ๋๋ ์์ง ๊ณ์ฐ๋์ง ์์ ์ํ์ด๊ธฐ ๋๋ฌธ์ ๊ณ์ฐํ๋ ๊ณผ์ ์์ด dp[n]์ ๋ฐํํ์ฌ ์๊ฐ์ ๋จ์ถ์ํจ๋ค.
dp[0]์ 0์ด๋ผ๋ ๊ฐ์ ๊ณ์ฐํ์ฌ ๋ฃ์ ๊ฒ์ด์ง๋ง ์กฐ๊ฑด๋ฌธ์ ๋ง์กฑํด 0๋ณด๋ค ์์ ์๋ฆฌ๊ฐ์ ๊ณ์ฐํ์ฌ ์ค๋ฅ๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์ n == 0์ผ๋์ ์กฐ๊ฑด์ ์ถ๊ฐํด์ค๋ค.
int dp[] = {0, 1};
int solution2(int n) {
if(dp[n]) return dp[n];
for(int now = 2; now <= n; now++) {
dp[now] = dp[now - 1] + dp[now - 2];
}
return dp[n];
}
๋๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์กฐ๊ฑด๋ฌธ์ ํตํด dp[n]์ ๊ณ์ฐํ๋์ง ํ์ธํ ํ ๊ณ์ฐํ ๊ฒฝ์ฐ dp[n]์ ๊ฐ์ ๋ฐํํ๋ค.
๊ทธ๊ฒ ์๋๋ผ๋ฉด for๋ฌธ์ ํตํด n์ ์๋ฆฌ๊น์ง ๊ณ์ฐํ์ฌ ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
์ ๋ฐฉ๋ฒ์์๋ dp[n]์ ๊ฐ์ ๊ณ์ฐํ์ง ์์ ๊ฒฝ์ฐ๋ฅผ ์กฐ๊ฑด๋ฌธ์ ์กฐ๊ฑด์ ๋ฃ์ด์ฃผ์์ง๋ง,
์๋๋ฐฉ๋ฒ์์ ์ด๋ ๊ฒ ์ ์ฉํ ๊ฒฝ์ฐ ๋ถํ์ํ๊ฒ ์ฝ๋์ ์ค์ด ๊ธธ์ด์ง๊ธฐ ๋๋ฌธ์ ์์๊ฐ์ด ๋ณ๊ฒฝํ์ฌ ์ ์ด์ฃผ์๋ค.
'Computer Science > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ๊ฐ ์๋ฆฌ ์์ ํฉ ๊ตฌํ๊ธฐ (0) | 2022.09.15 |
---|---|
[๋ฐฑ์ค/Baekjoon] 16953๋ฒ A->B (C++) (0) | 2022.05.19 |
[๋ฐฑ์ค/Baekjoon] 1012๋ฒ ์ ๊ธฐ๋ ๋ฐฐ์ถ (C++) (0) | 2022.03.04 |