Lv.2 - 피보나치 수

송철진·2023년 1월 29일
0

문제 설명

피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다.

예를들어

F(2) = F(0) + F(1) = 0 + 1 = 1
F(3) = F(1) + F(2) = 1 + 1 = 2
F(4) = F(2) + F(3) = 1 + 2 = 3
F(5) = F(3) + F(4) = 2 + 3 = 5
와 같이 이어집니다.

2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요.

제한 사항
n은 2 이상 100,000 이하인 자연수입니다.

입출력 예

nreturn
32
55

나의 코드

function solution(n) {
    let fArr = [0, 1]
    let i = 0
    while(i<=n){
        fArr[i+2] = fArr[i] % 1234567 + fArr[i+1] % 1234567
        i++         
    }
    return fArr[n] % 1234567
}

풀이

리턴 값에만 % 1234567을 하면 테스트코드 7~14번을 통과할 수 없다

왜냐?
Number 원시 값이 안정적으로 나타낼 수 있는 최대치가 2^53 - 1이기 때문이다
따라서 ( a + b ) % c === ( a % c + b % c ) 를 이용해
while문 안에 배열 fArr[]에 피보나치수 % 1234567 값을 넣어준다.

while문에만 % 1234567을 하면 테스트코드 9,10,12번을 통과할 수 없다

왜냐?
나머지의 합이 1234567보다 큰 경우가 있기 때문이다
따라서 리턴 값에도 % 1234567을 해야한다

profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글