[JavaScript] 배열 피보나치수열 문제

iberis2·2022년 12월 29일
0

알고리즘 문제

목록 보기
1/27

문제

수(num)를 입력받아 num번째까지 총 num + 1개의 피보나치 수열을 리턴해야 합니다.

0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1입니다. 그 다음 2번째 피보나치 수부터는 바로 직전의 두 피보나치 수의 합으로 정의합니다.
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...

인자 1 : num

number 타입의 num (num은 0 이상의 정수)

출력

배열을 리턴해야 합니다.

주의사항

반복문(for)문을 사용해야 합니다.
피보나치 수열은 0번부터 시작합니다.

입출력 예시

let output = fibonacci(5);
console.log(output[5]); // --> 5

output = fibonacci(9)[9];
console.log(output); // --> 34

내가 풀었던 방법

function fibonacci(num) {
  if (num === 0) {			// 0이 입력되는 경우 [0]출력
    return [0];
  } else {
    let arr = [0, 1]; 
    let xxNum = 0;			// 전전 숫자
    let xNum = 1;			// 전 숫자

    for (i = 2; i <= num; i++) { // 1이 입력되는 경우 i보다 작으므로 for문 패스
      let tempNum = xNum; // 전 숫자 → 전전 숫자가 되어야 하는데, 전 숫자가 (전전 + 전 숫자)로 바뀌어버리니까, 미리 임시 변수에 저장해놓음
      xNum = xxNum + xNum;	
      xxNum = tempNum; //임시 변수에 저장한 전 숫자를 → 전전 숫자에 할당
      arr[i] = xNum; //(전전 숫자 + 전 숫자) 합을 인데스 i번에 할당 
    }
    return arr;
  }
}

더 좋고 간결한 코드

function fibonacci(num) {
  let fib = [];
  
  for(let i = 0; i <= num; i++){
    if(i === 0 || i === 1){  // 0 또는 1이 입력되는 경우, 
      fib.push(i); 		// 0, 1을 fib 배열에 넣고 그대로 출력
  	} else{
    fib.push(fib[i - 1] + fib[i - 2]); //(전 숫자 + 전전 숫자)를 배열에 하나씩 추가해 줌
  	} 
  }
  return fib;
}
profile
React, Next.js, TypeScript 로 개발 중인 프론트엔드 개발자

0개의 댓글