Publish:

태그: , , , ,

카테고리:

문제

수(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번부터 시작합니다.

입출력 예시

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

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


풀이

로직

이 문제는 주의사항에 적힌 대로 for문을 써야만 한다.
이전에 풀어봤던 fibonacci를 푸는 문제는 두 가지로, 하나는 재귀함수,
하나는 위의 재귀함수 형식을 좀 더 효율적으로 업그레이드한 풀이였다.

이 문제는 저 둘을 풀 수 있다면 너무나도 쉬운 문제 풀이가 될 것이다.
효율이나 재귀 등의 방법이 아닌, 있는 그대로 for문을 이용한 풀이가 될 것이기 때문이다.

그러므로 아무것도 모른다는 전제하에 정리를 다시 해 보겠다.
피보나치 수열은 문제에서 나타난 대로 앞선 두 숫자의 합을 그다음 수로 정하는 수열이다.
0번째와 1번째의 피보나치 수를 직접 0과 1이라고 알려줬으므로 이를 토대로 구하면 된다.

for문을 사용할 것이므로 어떻게 반복을 시킬지 고민해 보자. 또한 출력이 ‘배열’이어야 한다는 점에서도 힌트를 얻어 생각하자.
n번째 피보나치 수를 알기 위해서는 n-1, n-2의 수를 더한 값이어야 한다.
즉 정리하면 다음과 같다.

  1. arr 변수를 선언하여 0번째와 1번째 값인 0과 1로 이루어진 배열을 할당한다. let arr = [0, 1];
  2. 입력변수 num이 0이거나 1일 때의 출력 배열을 정해둔다. (if문 사용)
  3. 입력 변수 num이 1보다 클 때부터는 1 이후의 값들을 알아야 num번째 값도 알 수 있기 때문에 for 문으로 arr 변수 안에 피보나치 수열을 하나씩 push한다.
  4. arrreturn한다.


해답 코드

레퍼런스 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function fibonacci(num) {
  let fibNum = [];

  for (let i = 0; i <= num; i++) {
    if (i === 0) {
      fibNum.push(0);
    } else if (i === 1) {
      fibNum.push(1);
    } else {
      fibNum.push(fibNum[i - 2] + fibNum[i - 1]);
    }
  }

  return fibNum;
}


작성자.ver

  • if문 하나 덜 쓰기 위해 고안했다.
    ```js function fibonacci(num) { let arr = [0, 1]; if (num === 0){ return [0]; }else{ // 원래 if else문으로 1일 때도 구하면 좋지만, // 어차피 첫 번째와 두 번째 값이 같다(1임)는 것을 이용해서 다음과 같이 지정했다. // 수학적인 의미를 생각하면 아래와 같이 하면 안 된다. for (let i = 1; i < num; i++){ arr.push(arr[i-1]+arr[i]) } return arr; } }

```




고양이를 사랑하는 개발자의 블로그예요! 찾아주셔서 감사합니다 🤗

Update:

댓글남기기