본문 바로가기

TIL(today i learned)/Projec Euler-수학문제풀이

[챌린지][2일차] 피보나치(Fibonacci) 수열의 합 구하기

오늘은 '프로젝트 오일러' 챌린지 2일차.

[1, 2]로 시작하는 수열의 피보나치 수열 중 4백만 이하의 값을 갖는 모든 피보나치 항의 합계 구하기

피보나치(Fibonacci) 수열의 각 항은 바로 앞의 항 두 개를 더한 것입니다. 1과 2로 시작하는 경우 이 수열은 아래와 같습니다. 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

while문을 사용해 풀었다.

let sequence = [0,1],
    sequence_even = [],
    n = 0;

while(n <=4000000){
    let a = sequence[sequence.length -1],
        b = sequence[sequence.length -2];
    n = a + b;
    sequence.push(n);
    if(n % 2 == 0){
        sequence_even.push(n);
    }
}

console.log(sequence, sequence_even); 
/*** [ 0,       1,       1,       2,       3,
       5,       8,      13,      21,      34,
      55,      89,     144,     233,     377,
     610,     987,    1597,    2584,    4181,
    6765,   10946,   17711,   28657,   46368,
   75025,  121393,  196418,  317811,  514229,
  832040, 1346269, 2178309, 3524578, 5702887] 
[2,       8,     34,
     144,     610,   2584,
   10946,   46368, 196418,
  832040, 3524578] ***/
  
console.log('피보나치 수열 합 : ', sequence.reduce((partialSum, a) => partialSum+a, 0));
//피보나치 수열 합 :  14930351
console.log('짝수 피보나치 수열 합 : ', sequence_even.reduce((partialSum, a) => partialSum+a, 0));
//짝수 피보나치 수열 합 :  4613732

코딩테스트 알고리즘 문제를 푸는 것보다 수학문제 푸는게 더 재밌고 쉽다...ㅋㅋㅋㅋ