#include <iostream>
using namespace std;
long long d[100];
long long fibo(int x){
if(x==1 || x==2){
return 1;
}
if(d[x]!=0){
return d[x];
}
d[x]=fibo(x-1)+fibo(x-2);
return d[x];
}
int main(){
cout << fibo(50) << '\n';
}
๋์ ๊ณํ๋ฒ์ด๋?
- ํ๋์ ํฐ ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ๊ฐ์ ์์ ๋ฌธ์ ๋ก ๋๋์ด์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ์ฌ ๋ค์ ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ ์ฌ์ฉํ๋ ๊ฒ
- ๊ณ์ฐํ ๊ฐ์ ์ ์ฅํด๋๋ ๋ฉ๋ชจ๋ฆฌ ์ฅ์ ์บ์ฌ(cache)์ ์ ์ฅํ๊ณ , ๋ต์ ์ฌ๋ฌ๋ฒ ๊ณ์ฐ(์ค๋ณต)ํ๋ ๋์ ํ๋ฒ ๋ง ๊ณ์ฐํด์ ๊ณ์ฐ๊ฒฐ๊ณผ๋ฅผ ์ฌํ์ฉํจ์ผ๋ก์จ ์๋ ํฅ์์ ๊พํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค
* ๊ทธ๋ผ ๋ถํ ์ ๋ณต์ด๋ ๋ญ๊ฐ ๋ค๋ฅธ๊ฑด๊ฐ์?
- ๋์ ๊ณํ๋ฒ๊ณผ ๋ถํ ์ ๋ณต์ด ์ฐจ์ด๊ฐ ๋ฐ์ํ๋ ๋ถ๋ถ์ ๋ฌธ์ ๋ฅผ ๋๋๋ ๋ฐฉ์์ด๋ค
- ๋ถํ ์ ๋ณต์ ๋จ์ง ํฐ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋๋์ด ํธ๋ ๊ฒ์ผ๋ก ์ค๋ณต๋ ๊ฒ์ด ์๋ค
- ๋์ ๊ณํ๋ฒ์ ์ด๋ค ๋ถ๋ถ ๋ฌธ์ ๋ ๋๊ฐ ์ด์์ ๋ฌธ์ ๋ฅผ ํธ๋ ๋ฐ(๋ฐ๋ณต์ด ์ผ์ด๋จ) ์ฌ์ฉ๋ ์ ์๊ธฐ ๋๋ฌธ์, ๋ต์ ์ฌ๋ฌ๋ฒ ๊ณ์ฐ ํ๋ ๋์ ํ๋ฒ๋ง ๊ณ์ฐํ๋ค(์ค๋ณต๋ ๊ฒ ํ์ฉ)
* ๊ทธ๋ผ ๋ค๋ฅธ dfs๋ฑ ๊ณผ ๊ฐ์ ์ฌ๊ทํจ์ ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ญ๊ฐ ๋ฌ๋ผ์?
- ์ผ๋ฐ ์ฌ๊ท๋ก ํ๋ฉด ๋์ผํ ์์ ๋ฌธ์ ๋ค์ด ์ฌ๋ฌ๋ฒ ๋ฐ๋ณต๋์ด ๋นํจ์จ์ ์ธ ๊ณ์ฐ์ด ๋๋ค. ์ฆ, ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฌ๊ณ ๋นํจ์จ์ ์ด๋ผ๋ ๊ฒ!!!
- n=10๋ง ์ผ๊ฒฝ์ฐ , n^2 ๋ก ๋ ๊ฒฝ์ฐ ์๊ฐ ๋ณต์ก๋๊ฐ ์ด์ด์ด์ด์์ฒญ ๋๊ฒ ์ฆ๊ฐํ๊ฒ ๋๋ค…
- DP ๋ ๊ทธ์ ๋ฐํด ๋ต์ ์ ์ฅํ๋ ์บ์๋ฐฐ์ด์ธ ๋ฉ๋ชจ์ด์ ์ด์
์ ํ์ฉํ์ฌ ์ค๋ณต ํ์๋ฅผ ์ค์ฌ์ฃผ์ด ์๊ฐ ๋ณต์ก๋๊ฐ ๊ฐ์ํ๋ค. (๋น ๋ฆ)
- ์) dfs ๋ก ์๊ฐ ์ ํ ๊ฑธ๋ฆด ๊ฒฝ์ฐ ์ฌ์ฉ
๋ฉ๋ชจ์ด์ ์ด์ (Memoization)
- ํจ์์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ์ฅ์๋ฅผ ๋ง๋ จํด๋๊ณ , ํ ๋ฒ ๊ณ์ฐํ ๊ฐ์ ์ ์ฅํด ๋๋ค ์ฌํ์ฉํ๋ ๊ธฐ๋ฒ
- ๋ฉ๋ชจ์ด์ ์ด์ ์ ํ์ฉํ์ฌ ํจ์ ํธ์ถ ํ์๊ฐ ์์ฒญ๋๊ฒ ๊ฐ์๋ ์ ์๋ค
- ์ด์ ๊ฐ์ด ๋ ๋ฒ ์ด์ ๋ฐ๋ณต ๊ณ์ฐ๋๋ ๋ถ๋ถ ๋ฌธ์ ๋ค์ ๋ต์ ๋ฏธ๋ฆฌ ์ ์ฅํจ์ผ๋ก์จ ์๋ ํฅ์์ ๊พํ๋ ์๊ณ ๋ฆฌ์ฆ ์ด๋ค.
* ํผ๋ณด๋์น ์์ด (fibonacci)
- ๋ํ์ ์ผ๋ก ํผ๋ณด๋์น ์์ด์ ๋ณด๋ฉด ๋์ ๊ณํ๋ฒ์ ์ ์ ์๋ค.
์ ํ์์ ์ด๋ ๋ค. dy[i] = dy[i-2]+dy[i-1]
dy[1]=1 // ๊ธฐ๋ณธ๊ฐ ์
ํ
dy[2]=2 // ๊ธฐ๋ณธ๊ฐ ์
ํ
dy[3]= dy[1]+dy[2]
dy[4]= dy[2]+dy[3]
…
dy[n]=n // ๋ต
๋ค์ ์์ด๊ฐ์ ์ด์ ์์ด ๊ณผ ๋ ๋จ๊ณ ์ ์์ด์ ํฉ์ผ๋ก ๊ตฌ์ฑ๋์ด ์ง๊ณ , ๊ณ์ ๊ฐ์ ์ ์ฅํ์ฌ ์ต์ข ํด๋ฅผ ๊ตฌํ๋ค.
function fib(n)
if n = 0
return 0
else if n=1
return 1
else
return fib(n-1) + fib(n-2)
์ฝ๋๋ก ์ง๋ณด์๋ฉด ์ด๋ฌํ ํจ์๋ก ๋ง๋ค ์ ์๋ค
* ๊ทธ๋ผ DP๋ ์ธ์ ์ฌ์ฉํ๋ ๊ฑด๊ฐ์?
- ์์ ๋ฌธ์ ๋ค์ด ๋ฐ๋ณต๋ ๊ฒฝ์ฐ (๊ท์น ๋ฐ๊ฒฌ)
- ๊ฐ์ ๋ฌธ์ ๋ค์ ๊ตฌํ ๋ ๋ง๋ค ์ ๋ต์ด ๊ฐ์ ๊ฒฝ์ฐ
* ๋์ ๊ณํ๋ฒ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ ๋จ๊ณ ๋ฐฉ๋ฒ?
- ์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ์์ ํ์์ ์ด์ฉํด ํด๊ฒฐํ๋ค
- ์ค๋ณต๋ ๋ถ๋ถ ๋ฌธ์ ๋ฅผ ํ๋ฒ๋ง ๊ณ์ฐํ๋๋ก ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ ์ฉํ๋ค
- ์ต์ ํด๋ฅผ ์ฐพ๋๋ค
DP์ ์ข ๋ฅ
- LIS (์ต๋๋ถ๋ถ์ฆ๊ฐ์์ด)
- ๋ฐธ๋ง-ํฌ๋ ์๊ณ ๋ฆฌ์ฆ
- ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ ๋ฑ๋ฑ
์ถ์ฒ
'๐ฃ๏ธ ์ ์ ์ธํฐ๋ทฐ > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ์ ๊ฐ๋ฐ์ ๊ธฐ์ ๋ฉด์ : ๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ (3) | 2024.01.03 |
---|---|
์ ์ ๊ฐ๋ฐ์ ๊ธฐ์ ๋ฉด์ ์ค์ ๊ธฐ์ถ : ํต ์ ๋ ฌ (1) | 2024.01.02 |