강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

xuv2님의 프로필 이미지
xuv2

작성한 질문수

38군데 합격 비법, 2025 코딩테스트 필수 알고리즘

4-8. Dynamic Programming

DP Java 예제 자료형 오버플로우 문제

해결된 질문

작성

·

23

·

수정됨

0

1. 현재 학습 진도

  • 41강 4-8 DP 부분 수강 중입니다

     

     

2. 어려움을 겪는 부분

  • 첨부해주신 Java 코드로 구현시 fib(100) 의 결과 값이 long 범위에 초과 되어 오버플로우가 발생하는 것 같습니다.

     

     

3. 시도해보신 내용

  • BigInteger 를 도입하여 해결하긴 했지만, 더 나은 방법이 있다면 알려주시면 감사드리겠습니다. 

import java.math.BigInteger;
import java.util.HashMap;
import java.util.Map;

public class FiboDynamicProgramming {

    private static Map<Integer, BigInteger> memo = new HashMap<>();

    static {
        memo.put(1, BigInteger.ONE);
        memo.put(2, BigInteger.ONE);
    }

    // 1. 메모에 값이 있으면 반환
    // 2. 없으면 피보나치 공식 적용 및 메모이제이징
    private static BigInteger fiboDynamic(int n, Map<Integer, BigInteger> fiboMemo) {
        if (fiboMemo.containsKey(n)) {
            return fiboMemo.get(n);
        }

        BigInteger nthFibo = fiboDynamic(n - 1, fiboMemo).add(fiboDynamic(n - 2, fiboMemo)) ;
        fiboMemo.put(n, nthFibo);

        return nthFibo;
    }

    public static void main(String[] args) {
        System.out.println(fiboDynamic(100, memo));
    }

}

답변 1

0

게시판 보다가 답변이 안달려있어 학습겸 답변 달아드립니다!

정확한 피보나치를 구할 때는 BigInteger가 맞지만, 알고리즘 문제에서는 보통 값이 너무 커지므로 정확한 값 대신 문제에서 제공한 특정 mod(%)로 나눈 나머지만 요구하는 경우도 있는걸로 알고있습니다.

xuv2님의 프로필 이미지
xuv2
질문자

도와주셔서 너무너무 감사합니다 !!!!

xuv2님의 프로필 이미지
xuv2

작성한 질문수

질문하기