인프런 커뮤니티 질문&답변
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(%)로 나눈 나머지만 요구하는 경우도 있는걸로 알고있습니다.





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