강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của xuv2
xuv2

câu hỏi đã được viết

Bí quyết đỗ 38 nơi, các thuật toán bắt buộc cho kỳ thi Coding Test 2025

4-8. Quy hoạch động

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

Đã giải quyết

Viết

·

87

·

Đã chỉnh sửa

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));
    }

}
python코딩-테스트알고리즘data-structure

Câu trả lời 2

1

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

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

xuv2님의 프로필 이미지
xuv2
Người đặt câu hỏi

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

dingcodingco님의 프로필 이미지
dingcodingco
Người chia sẻ kiến thức

JHL 님 답변 감사드려요!!!

0

dingcodingco님의 프로필 이미지
dingcodingco
Người chia sẻ kiến thức

오 잘해결되셨군요!!! 다행입니다 xuv2 님 덕분에 교재에도 업데이트해두겠습니다!!

기여해주셔서 감사드려요 ㅎㅎ

Hình ảnh hồ sơ của xuv2
xuv2

câu hỏi đã được viết

Đặt câu hỏi