DP Java 예제 자료형 오버플로우 문제
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));
}
}
Answer 2
1
게시판 보다가 답변이 안달려있어 학습겸 답변 달아드립니다!
정확한 피보나치를 구할 때는 BigInteger가 맞지만, 알고리즘 문제에서는 보통 값이 너무 커지므로 정확한 값 대신 문제에서 제공한 특정 mod(%)로 나눈 나머지만 요구하는 경우도 있는걸로 알고있습니다.
수강평 이벤트
0
16
2
코딩테스트 처음인데 이런 공부방법이어도 괜찮을까요
0
57
2
3-3 정렬-2 선택정렬 로직
0
37
2
링크드 리스트 끝에서 k번째 값 출력하기
0
43
2
LinkedList 과제 Fast, slow 포인터
0
49
2
투포인터 시간복잡도
0
50
2
수강평 작성 후 자료
0
51
2
수업교재 링크 오류
2
107
2
프로그래머스에서 제출 후 채점시 틀림ㅠ
0
127
2
1-10 알고리즘 더 풀어보기(2) 질문 있습니다
0
69
2
문제 풀이 방식 관련 질문입니다!
0
81
2
1-5 알고리즘과 친해지기 (2) - 최빈값찾기 질문 있습니다
0
88
2
수업자료 pdf 받고싶습니다
0
104
2
강의 자료 오류 수정
0
71
1
2-10 더하거나 빼거나 관련 질문입니다
0
61
2
3-8 해쉬 -2
0
48
2
Linked List Element Delete Explanation Problem
0
66
2
강의3-4 스택 탑 문제
0
74
2
코드스니펫 입출력 케이스에 오류가 있는것 같아요
0
98
3
링크드 리스트 원소 찾기 구현 방식 질문드립니다.
0
74
2
1874 - 스택 문항
0
80
2
4-9 4주차 숙제중 농심라면 문제
0
109
2
DFS 에서 스택을 사용하는 이유
1
184
3
들여쓰기가 햇갈리네요
0
120
2

