질문 :
개구리는 한 번에 한 두 걸음 씩 뛸 수 있습니다. 개구리가 n 단계 단계에서 점프하는 총 점프 방법 수를 찾습니다.
답은 모듈로 1e9 + 7 (1000000007)이어야합니다. 계산의 초기 결과가 1000000008이면 1을 반환하십시오.
예 1 :
입력 : n = 2 출력 : 2
예 2 :
입력 : n = 7 출력 : 21
예 3 :
입력 : n = 0 출력 : 1
힌트 :
0 <= n <= 100
솔루션 1 : 피보나치 수열, f (n) = f (n-1) + f (n-2)
int numWays(int n)
{
if (n == 1 || n == 0)
{
return 1;
}
else if (n == 2)
return 2;
else
{
int first = 1, second = 2, sum = 0;
for (int i = 3; i <= n; i++)
{
sum = first + second;
first = second % 1000000007;
second = sum % 1000000007;
}
return sum % 1000000007;
}
}
해결 방법 2 : 동적 프로그래밍
int numWays(int n)
{
std::vector<int> dp;
for (int i = 0; i <= n; i++)
{
if (i == 0 || i == 1)
dp.push_back(1);
else if (i == 2)
dp.push_back(2);
else
{
dp.push_back((dp[i - 1] + dp[i - 2]) % 1000000007);
}
}
return dp[n];
}