[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개의 댓글

관련 채용 정보