강의로 돌아가기
ahnseo.yoo@gmail.com

자바스크립트 7번부터 틀렸다고 나오는데 왜그런지 알려주실분...

감이 잘 오지 않네요 ㅠㅠ 왜 그런걸까요?

작성중인 코드―solution.js
1
2
3
4
5
6
7
8
9
function solution(n) {
    let fib = [0,1];
    for(let i = 2; i <= n; i++) {
        fib.push(fib[i-1] + fib[i-2]);
    }

    return fib[n] % 1234567;

}
  • donkeeman

    저도 같은 문제로 고민하다가 BigInt를 사용하니 해결되었습니다

    donkeeman―2022.09.15 16:27
  • sh

    fib.push( (fib[i-1] + fib[i-2]) % 1234567 ) 로 넣으시면 될것같아요

    sh―2022.10.17 18:33
1 개의 답변
산들이

🚨이런 문제가 있어요
n이 매우 큰 경우 n번째 피보나치 수는 언어가 표현할 수 있는 자료형의 범위를 넘어가, 오버플로우가 납니다.

예를 들어

47번째 피보나치 수는 2,971,215,073이고, 이 수는 32비트 정수(ex. int) 범위를 넘어 오버플로우가 발생합니다.
100,000번째 피보나치 수는 자릿수가 20,000을 넘어가며, 이는 64비트 정수(ex. long) 범위를 넘어 오버플로우가 발생합니다.

💡그럼 코드를 어떻게 바꾸면 좋나요?
모든 단계에서 % 연산을 사용하여, 모든 연산에서 오버플로우가 일어나지 않게 만들어 주세요.

  • HAMJJUMAN

    와! 이런 문제가 있었군요! 감사합니다!!

    HAMJJUMAN―2023.09.21 08:39
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.