• dmchoi
  • [백준]1003번 - 피보나치 함수

    2022년 02월 28일

    문제 링크  

    [해결 코드]

    const fs = require("fs");
    let input = fs.readFileSync("/dev/stdin").toString().split("\n");
    
    const [numOfTestCase, ...arr] = input.map((v) => +v);
    const DP0 = new Array(41).fill(0);
    const DP1 = new Array(41).fill(0);
    
    DP0[0] = 1;
    DP1[0] = 0;
    
    DP0[1] = 0;
    DP1[1] = 1;
    
    for (let i = 2; i <= 40; i++) {
      DP0[i] = DP0[i - 1] + DP0[i - 2];
      DP1[i] = DP1[i - 1] + DP1[i - 2];
    }
    
    for (let i = 0; i < numOfTestCase; i++) {
      console.log(`${DP0[arr[i]]} ${DP1[arr[i]]}`);
    }

    요즘 알고리즘 공부를 하다가 DP(다이나믹 프로그래밍) 부분이 약하다는 것을 느끼고 백준 사이트에서 DP 문제를 쉬운 난이도부터 풀어보려고 한다.

    1003번 피보나치 함수 문제가 백준에서 제일 쉬운 DP문제가 아닐까 싶다..


    [풀이]

    0이 출력되는 횟수를 담은 배열과 1이 출력되는 횟수를 담은 배열을 각각 만들어줬다.

    이후 작은 수부터 배열에 출력 횟수를 저장하도록 하는 Bottom-Up을 이용했다.


    결과캡쳐


    제출하고 보니 예전에 DP라는 걸 모른채로 풀어 시간 초과로 통과하지 못했던 문제였다.

    지금이라도 해결해서 다행이다..!

    Tags
      © 2021 dmchoi, Powered By Gatsby.