https://programmers.co.kr/learn/courses/30/lessons/12945
function solution(n) {
let f=[];
f[0]=0;
f[1]=1;
let i=1;
while(true){
i++;
f[i]=(f[i-2]%1234567)+(f[i-1]%1234567);
if(i===n) return f[i]%1234567;
}
}
처음에는 아래와 같이 풀었는데 테스트 케이스 7~14가 실패로 나왔다.
function solution(n) {
let f=[];
f[0]=0;
f[1]=1;
let i=1;
while(true){
i++;
f[i]=(f[i-2])+(f[i-1]);
if(i===n) return f[i]%1234567;
}
}
왜그런지 찾아보니까, 변수가 담을 수 있는 값의 범위를 넘어서 그렇다고 한다. 피보나치는 수가 급격하게 커지기 때문에, n의 개수가 크다면 제대로된 값을 담을 수 없게 되는 것이다.
프로그래머스 질문하기에서 어떤 분이 팁을 주셔서, 적용했더니 테케 모두 통과했다.
(A+B)%C=((A%C)+(B%C))%C
의 공식을 적용했다.
10/27
상황 이해하기(변수가 담을 수 있는 값의 범위 넘는 상황)