프로그래머스 - 피보나치 (Level 2)
2024. 1. 30. 17:07ㆍ코딩테스트 정리(자바)
728x90
1. 메모제이션 사용하지 않고 재귀를 돌리면 시간초과가 발생
2. 메모제이션을 사용하니 7번 테케부터 오류가 발생
3. 원인을 모르겠어 검색해 보니
->
n이 매우 큰 경우 n번째 피보나치 수는 언어가 표현할 수 있는 자료형의 범위를 넘어가, 오버플로우가 납니다.
예를 들어
100,000번째 피보나치 수는 자릿수가 20,000을 넘어가며,
이는 64비트 정수(ex. long) 범위를 넘어 오버플로우가 발생합니다.
💡그럼 코드를 어떻게 바꾸면 좋나요?
모든 단계에서 % 연산을 사용하여, 모든 연산에서 오버플로우가 일어나지 않게 만들어 주세요.
라고 하여 수정한 결과 성공!
import java.util.*;
class Solution {
public long Fibo(int n,long[] memo){
if(memo[n]>-1)
return memo[n]%1234567;
else{
if(n<2)
memo[n]=n;
else
memo[n]=Fibo(n-1,memo)+Fibo(n-2,memo);
return memo[n]%1234567;
}
}
public int solution(int n) {
long[] memo=new long[n+1];
Arrays.fill(memo,-1);
long answer=Fibo(n,memo);
return (int) answer;
}
}728x90
'코딩테스트 정리(자바)' 카테고리의 다른 글
| 프로그래머스 - 등굣길(Level 3) (2) | 2024.02.02 |
|---|---|
| 프로그래머스 - 정수 삼각형(Level 3) (0) | 2024.01.31 |
| 프로그래머스 - 완주하지 못한 선수(Level 1) (0) | 2024.01.29 |
| 프로그래머스 - 없는 숫자 더하기(Level 1) (2) | 2024.01.28 |
| 프로그래머스 - 중복된 문자 제거(Level 1) (0) | 2024.01.25 |