1.Dynamic Programming(DP)을 활용한 풀이
2. 재귀함수를 활용한 풀이
Dynamci Programming과 Memoization의 개념 설명
Dynamic Programming & Memoization
피보나치 수를 이용해 n(n>2)에 대하여 1234567로 나눈 나머지를 리턴하는 함수를 만든다.
여기서 주의할 점은 f(n)만을 1234567로 나눈 나머지가 아니라 모든 f(i)를 1234567로 나눈 값이 피보나치의 값이 되는 것이다.
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
vector<int> fb; //크기가 작기 때문에 vector가 아닌 배열을 사용할 수 있다.
fb.push_back(0);
fb.push_back(1);
for(int i=2; i<=n; i++){
fb.push_back((fb[i-1]+fb[i-2] )% 1234567); //각각의 결과를 1234567로 나눠 나머지를 구한다.
}
answer=fb[n];
return answer;
}
2.재귀함수를 활용한 풀이
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
if(n==0){
answer=0;
}
else if(n==1){
answer=1;
}
else{
answer=(solution(n-2) + solution(n-1)) % 1234567;
}
return answer;
}