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
36
1
3-3 정렬-2 선택정렬 로직
0
30
1
링크드 리스트 끝에서 k번째 값 출력하기
0
33
1
LinkedList 과제 Fast, slow 포인터
0
43
1
투포인터 시간복잡도
0
42
1
수강평 작성 후 자료
0
46
2
수업교재 링크 오류
2
103
2
프로그래머스에서 제출 후 채점시 틀림ㅠ
0
119
2
1-10 알고리즘 더 풀어보기(2) 질문 있습니다
0
66
2
문제 풀이 방식 관련 질문입니다!
0
80
2
1-5 알고리즘과 친해지기 (2) - 최빈값찾기 질문 있습니다
0
82
2
수업자료 pdf 받고싶습니다
0
99
2
강의 자료 오류 수정
0
67
1
2-10 더하거나 빼거나 관련 질문입니다
0
58
2
3-8 해쉬 -2
0
45
2
Linked List Element Delete Explanation Problem
0
61
2
강의3-4 스택 탑 문제
0
73
2
코드스니펫 입출력 케이스에 오류가 있는것 같아요
0
93
3
링크드 리스트 원소 찾기 구현 방식 질문드립니다.
0
71
2
1874 - 스택 문항
0
77
2
4-9 4주차 숙제중 농심라면 문제
0
103
2
DFS 에서 스택을 사용하는 이유
1
178
3
들여쓰기가 햇갈리네요
0
117
2
강의자료 5일차 11. 카카오 추가 코딩 테스트 - 4 java코드가 잘못되어 있습니다.
0
48
2

