Algorithm/Baekjoon(Node.js)

[JavaSrcipt] Baekjoon - 10870 : 피보나치 수 5

비망노트 2021. 10. 9. 21:11

문제

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.

이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.

n=17일때 까지 피보나치 수를 써보면 다음과 같다.

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597

n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 n이 주어진다. n은 20보다 작거나 같은 자연수 또는 0이다.

출력

첫째 줄에 n번째 피보나치 수를 출력한다.

 

예제입력 예제출력
10 55

 

❌ 풀이

const input=Number(require('fs').readFileSync('/dev/stdin').toString());
let arr=[0,1];
let temp;
for(let i=1;i<input;i++){
    
    temp=arr[1]
    arr[1]=arr[0]+arr[1];
    arr[0]=temp;
    
}console.log(input==0?0:arr[1])

정보처리기사에서 정렬코드 공부할때 많이보던 잠시 값을 담아두는 그릇의 개념으로 temp를 사용해봤다.

정답은 맞지만 for문이아닌 재귀함수를 연습하는 문제이니 패스한다.

 

⭕ 풀이

const input=require('fs').readFileSync('/dev/stdin').toString();

function fibonacci(x){
    
    if(x<=1){
        return x;
    }
    return fibonacci(x-1)+fibonacci(x-2);
}
console.log(fibonacci(input));

 

    if(x===0){
        return 0;
    }else if(x===1){
        return 1;
    }

이전글에서 배웠던 기반조건을 어떻게 해야하나 고민하다

x가 0이면 0을 1이면 1을 반환하는 방식으로 적었었는데

이럴경우 fibonacci(2)이상을 실행하면 답이 나오지만

0과 1이 들어가면 에러가 나길래 

x가 1이하일경우 x를 그대로출력하도록 기반조건을 만들었다.

 

천천히 다시보던중 입력값을 Number로 감싸지않고 문자열로 받았는데

비교연산자를 === 사용하여 형식이 같지않아 에러가 난거같았다.

 

그래서 밑의코드로 기반조건을 수정하거나 입력값을 수정하니 정답이되었다.

    if(x==0){
        return 0;
    }else if(x==1){
        return 1;
    }
    
    혹은
    
    input=Number(~~~)

 

for, while 문이아닌 재귀함수로

배워가는게 재밌긴한데 아직 기반조건을 설정하는것과

기반조건까지 내려갔다가 올라오는 과정을

머릿속으로 돌려보는게 벅차다.

 

 

 

 

 

-출처

https://www.acmicpc.net/problem/10870