피보나치

Taeseon Kim·2021년 3월 9일
0

js

목록 보기
1/1
post-thumbnail

첫 블로그 게시물인데,, 일단 일기 쓰듯 적어본다.

중학교 1학년 과정에서 수학을 포기했다.

피보나치 수열이라는 것은 들어보기만 했지 만들기 위해 노력을 하는 날이 올 줄이야,,

수(num)를 입력 받아 num + 1개 값을 가진 배열을 생성하는 것이 오늘의 목표였다.

제공된 정보는 0번째는 0, 1번째는 1이라는 것.

머릿속으로 굴려보니 알고리즘이 대충 나오게 되었다.

내가 생각한 알고리즘

  1. 현재 내가 얻고자 하는 값(n번째)을 구하기 위해서는
  2. 방금 구한 값(n-1번째)과 그 전 값(n-2번째)을 더해야 한다.
  3. n-1번째 값을 n-2번째 값으로 만들고
  4. n번째 값을 다음 반복에서 n-1번째 값으로 만들어야 한다.

시작조차 어떻게 해야 할지 막막했다.

일단 구한 값들을 모아줄 빈 array를 선언하고,

let arr = [];

디폴트 값이자 문제에도 나온 0번째, 1번째 피보나치 수를

let before_second = 0;
let before_first = 1;

이후 나올 반복문에서 쓰일 변수에 할당했다.
이러면 조건문을 쓸 때 좀 더 간결해질 것이다.

조건문은 수없이 많은 오답을 경험하며 수정했다.

처음엔

for(i = 0; i<=num; i = i + before_first)

이렇게 만들어보기도 하고,

for(i = 1; i<=num; i = before_first + before_second)

이렇게 만들어 보기도 했다.

실행문으로는 알고리즘 3, 4번에 맞추어 만들어 보기로 했다.

{
before_second = before_first;
before_first = i;
arr.push(i);
} 

실행문은 값을 할당하는 과정이 꽤 맘에 드는데, 조건문이 이를 따라오지 못한다.

문제를 잘 읽어보니 num + 1 개의 값을 가진 배열(arr)을 return해야 하는데,
이에 맞는 조건을 만들기 위해서는 조건식을 수정해야 했다.

for (i=0;arr.length<=num;i=a+b)

arr의 원소의 갯수가 num의 값보다 클 때 멈추면 되더라,

오늘 문제 푸는 과정은 밥먹으면서까지 고민하며 풀다보니
이게 사람 사는게 맞나 싶어 좀 슬펐지만,
나름 쉽지 않았던 문제, 도전하는 것이 즐거웠다.

function fibonacci(num) {
  let arr = [];
  before_second = 0;
  before_first = 1;
  for (i = 0; arr.length <= num; i = before_second + before_first){
    before_second = before_first;
    before_first = i;
    arr.push(i);
  }
  return arr;
}
profile
공부하여 이해가 된 것만 정리합니다.

0개의 댓글