백준-2748. 피보나치 수2

2748

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" 방식으로 해결

© 2021. All rights reserved.

----------Heesoo's Tech History----------

by C.H.S