개발새발 로그

[JS] 프로그래머스 : 피보나치 수 본문

알고리즘

[JS] 프로그래머스 : 피보나치 수

이즈흐 2023. 6. 12. 18:25

어려웠던 이유

  1. 피보나치 수에 대한 이해 F(5)는 3+5다. (F(5)는 피보나치의 5번째)
  2. int형은 2,147,483,647 까지 가능하다. 만약 +1이 되면 -2,147,483,647 되버린다.
  3. 그래서 문제에 1234567로 나눈 나머지만 저장하는 것은 int의 범위에서 가능하게된다.
  4. 이유눈 1234567로 나눈 나머지의 수는 1234567보다 무조건 작으므로 저장이 가능함

한줄 요약: 문제에서 1234567로 나눈 나머지를 정답으로 내놓으라는 것은 문제를 꼰 것이 아니라 int 자료형의 범위 내에 항상 값이 있을 수 있도록 한 배려이며, 자료형의 크기에 제한이 있는 언어를 쓸 경우

(A+B) % C = ( (A%C) + (B%C) ) % C 라는 성질을 이용해서 매번 계산 결과에 1234567으로 나눈 나머지를 대신 넣는 것으로 int 범위 내에 할상 값이 존재함을 보장할 수 있다.

 

 

첫 번째풀이

function solution(n) {
    var answer = 0;
    let f1 = 0, f2 = 1;

    for(let i = 2; i <= n; i++){
        answer = (f1 + f2) % 1234567;
        f1 = f2;
        f2 = answer;
    }

    return answer;
}

 

두 번째 풀이

function solution(n) {
    var answer = 0;
    let arr=Array.from({length:n+1},()=>0);
    arr[0]=0;
    arr[1]=1;
    for(var i=2;i<=n;i++){
        arr[i]=(arr[i-2]+arr[i-1])%1234567
    }
    return arr[n];
}

 

728x90
반응형
LIST