프로그래머스 연습문제 - 피보나치 수(Level2, JS)
function solution(n) {
fibo = [0,1];
for (let i = 0 ; i < n-1 ; i++){
fibo.push((fibo[i] + fibo[i+1]) % 1234567 );
}
return fibo[fibo.length - 1];
}
테스트케이스 7번 이후부터 계속 실패가 떴다. 왜그럴까?? 질문하기에서 그 답을 찾을 수 있었다.
🚨n이 매우 큰 경우 n번째 피보나치 수는
언어가 표현할 수 있는 자료형의 범위를 넘어가, 오버플로우가 난다.🚨
예를 들어 47번째 피보나치 수는 2,971,215,073이고,
이 수는 32비트 정수(ex. int) 범위를 넘어 오버플로우가 발생합니다.
100,000번째 피보나치 수는 자릿수가 20,000을 넘어가며,
이는 64비트 정수(ex. long) 범위를 넘어 오버플로우가 발생합니다.
💡그럼 코드를 어떻게 바꾸면 좋나요?
모든 단계에서 % 연산을 사용하여,
모든 연산에서 오버플로우가 일어나지 않게 만들어 주세요