피보나치 수는 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 이하인 자연수입니다.
입출력 예
n | return |
---|---|
3 | 2 |
5 | 5 |
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
을 해야한다