알고리즘/백준

백준[2748 번] - 피보나치 수 2

문제

https://www.acmicpc.net/problem/2748

분석

점화식과 간단한 재귀 호출을 이용하면 쉽게 풀 수 있지만, 메모이제이션을

이용해 풀어 봤다.

필자가 앞서 써둔 글이 있다.

읽고 이 문제를 보면 큰 도움이 될 것이다.

2020/11/26 - [알고리즘 문제 해결 전략] - 동적 계획법 (Dynamic Programming)

 

동적 계획법 (Dynamic Programming)

도입 동적 계획법을 처음 듣는 사람은 다소 오해를 할 수 있다. 필자 또한 처음 동적 계획법 특히 영어로 dynamic programming을 봤을 때, 'heap 영역을 다루는 기법인가?'라고 생각했다. 일반적으로 우

return-value.tistory.com

 

구현

long long cache[MAX];
long long fibo(int n)
{
	//base case
	if (n == 1) return 1;
	if (n == 0) return 0;
	//계산한적이 있는 경우
	long long& ret = cache[n];
	if (ret != -1) return ret;

	return ret = fibo(n - 1) + fibo(n - 2);
}

int main()
{
	memset(cache, -1, sizeof(cache));
	int n;
	cin >> n;
	cout << fibo(n);
	return 0;
}

※ 데이터 크기에 주의하자.

 

회고

앞서 메모이제이션에 대해 공부하고 이 문제를 바라보니, 메모이제이션의 필요성을 다시 한번 느끼게 된다.

'알고리즘 > 백준' 카테고리의 다른 글

백준[1003 번] - 피보나치 함수  (0) 2020.11.27
백준[2630번] - 색종이 만들기  (0) 2020.11.22