[Programmers] 피보나치 수 - JavaScript

Joosi_Cool·2023년 2월 5일
0

Programmers

목록 보기
5/98
post-thumbnail

문제설명



설계 과정


설계도 그렇고, 초기 코드도 그렇고 문제에서 일단 하라는대로 재귀를 이용하여 만들긴 했다. 하지만 계속 시간 초과가 뜰 것이라고 예상했다..... 과연



초기 코드

function fivo(n){
    if(n===0||n===1) return n;
    else{
        return fivo(n-1)+fivo(n-2);
    }
}

function solution(n) {
    return fivo(n)%1234567;
}


결과


결과는 역시나 시간초과런타임 에러 가 떴다. 이는 나타낼 수 있는 숫자의 범위를 넘어서, 이를 표현 못하기 때문에 이러한 결과가 나오는 것이다. 흔히 말해서 오버 플로우가 걸린 것이다. 그래서 문제에서도 이를 방지하기 위해 1234567 을 나눈 값을 나타내라고 하는 것이다.
이를 해결하기 위해선 모듈러 산술 이라는 것이 사용된다. 모듈러 연산중에 아래와 같은 공식을 활용하여 문제 접근이 가능하다.

(A + B) % C ≡ ( ( A % C ) + ( B % C) ) % C



개선 코드

function solution(n) {
    
    var fivoArr= [0,1];
    if(n>2){
        for(var i =2;i<n+1;i++){
            fivoArr[i] = (fivoArr[i-1] + fivoArr[i-2])%1234567;
        }
    }
    return fivoArr[n];
}

위의 모듈러 공식을 통해서 이러한 접근이 가능하며, 이는 피보나치 수열이 숫자의 범위를 넘어가지 않게 단계별로 체크하는 기능을 하며 오버 플로우가 걸리지 않게 해준다.

profile
집돌이 FE개발자의 노트

0개의 댓글