백준-2748. 피보나치 수2
카테고리 : Algorithm >> Dynamicprogramming
N의 제한이 90으로만 변해도 피보나치 수열의 수는 매우 커질 수있으므로, 피보나치 수1 문제와 푸는 방식은 같지만 데이터형을 변화시켜줘야한다.
C++ 코드
#include <iostream>
#include <algorithm>
using namespace std;
long long d[100];
long long dp(int n) {
//1. base check
if (n <= 1) return n;
//2. memoization
if (d[n] > 0) return d[n];
//3. recurrence relation
d[n] = dp(n - 1) + dp(n - 2);
//printf("%d: %lld\n",n,d[n]);
return d[n];
}
int main() {
int N;
scanf("%d", &N);
printf("%lld", dp(N));
}
C# 코드
using System;
namespace C_sharp_ex
{
class Program
{
static void Main(string[] args)
{
int N = int.Parse(Console.ReadLine());
long[] d = new long[100];
d[1] = 1;
for(int i = 2; i <= N; i++)
d[i] = d[i - 1] + d[i - 2];
Console.Write(d[N]);
}
}
}
Java 코드
import java.io.*;
import java.util.*;
public class Main {
static long[] d = new long[100];
public static long dp(int n){
//1. base check
if(n <= 1) return n;
//2. memoization
if(d[n] > 0) return d[n];
//3. recurrence relation
d[n] = dp(n-1) + dp(n-2);
return d[n];
}
public static void main(String[] args) throws IOException {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
System.out.println(dp(n));
}
}
Kotlin 코드
import java.util.*
var d = LongArray(100, {0})
fun dp(n: Int):Long {
if(n == 0) return 0
if(n == 1) return 1
if(d[n] > 0) return d[n]
d[n] = dp(n-1) + dp(n-2)
return d[n]
}
fun main(args: Array<String>) {
val s = Scanner(System.`in`)
val input = s.nextInt()
print("${dp(input)}")
}
Python 코드
N = int(input())
d = [0 for _ in range(100)]
d[1] = 1
for i in range(2, N+1):
d[i] = d[i-1] + d[i-2]
print(d[N])
#파이썬은 메모리 초과 문제로 "bottom - up" 방식으로 해결