백준 SILVER 1(떡 먹는 호랑이) - #2502

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2023-02-10

  • 해결 방법 :

    • dp를 활용해 문제 해결
    • dp[n] = dp[n-1] + dp[n-2]
    • dp[0], dp[1]을 1로 초기화하고 적합한 A,B를 찾을 때까지 반복
      • 각 반복 별 dp의 마지막 값이 주어진 K와 같은 경우 정답
      • K보다 큰 경우 dp 초기화 후 다시 반복 (dp[0]을 1 증가, dp[1] = dp[0])
      • K보다 작은 경우 dp[1]만 1 증가
  • 회고 :

    • 테스트 케이스 값과 동일하지 않아 계속 살펴봤는데 답이 여러개일 때 하나만 반환하면 되는거였다;; 문제 끝까지 잘 읽기
  • 코드

    const fs = require('fs');
    const filePath = process.platform === 'linux' ? '/dev/stdin' : '../input.txt';
    const input = fs.readFileSync(filePath).toString().trim();
    
    solution(input);
    
    function solution(props) {
      const [D, K] = props.split(' ').map((prop) => +prop);
      const dp = Array(D).fill(0);
      dp[0] = dp[1] = 1;
    
      while (true) {
        for (let i = 2; i < D; i++) {
          dp[i] = dp[i - 1] + dp[i - 2];
        }
    
        if (dp[D - 1] === K) {
          console.log(`${dp[0]}\n${dp[1]}`);
          break;
        }
    
        if (dp[D - 1] > K) {
          dp[0] += 1;
          dp[1] = dp[0];
        } else {
          dp[1] += 1;
        }
      }
    }
    
  • 출처: 백준