백준 GOLD 5(벼락치기) - #14728

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2023-02-14

  • 해결 방법 :

    • dp를 활용해 문제 해결
    • 한 단원을 여러개 풀 수 없으므로 끝에서부터 dp 업데이트
      • 업데이트 조건: dp[t], dp[t - K] + S 중 큰 값
  • 회고 :

    • x
  • 코드

    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) {
      props = props.split('\n');
      const [N, T] = props[0].split(' ').map((e) => +e);
      props = props.slice(1).map((prop) => prop.split(' ').map((e) => +e));
    
      const dp = Array(T + 1).fill(0);
    
      for (let n = 1; n <= N; n++) {
        for (let t = T; t >= 0; t--) {
          const [K, S] = props[n - 1];
    
          if (t >= K) {
            dp[t] = Math.max(dp[t], dp[t - K] + S);
          }
        }
      }
    
      console.log(dp[T]);
    }
    
  • 출처: 백준