• dmchoi
  • [백준]1932번 - 정수 삼각형

    2022년 03월 08일

    문제 링크  

    [해결 코드]

    const fs = require("fs");
    const [n, ...arr] = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
    
    const N = +n;
    let dp = arr.map((v) => v.split(" ").map((v) => +v));
    
    for (let i = 1; i < N; i++) {
      for (let j = 0; j < dp[i].length; j++) {
        // 맨 앞
        if (j == 0) dp[i][j] += dp[i - 1][j];
        // 맨 뒤
        else if (j == dp[i].length - 1) dp[i][j] += dp[i - 1][j - 1];
        // 중간
        else dp[i][j] += Math.max(dp[i - 1][j - 1], dp[i - 1][j]);
      }
    }
    
    console.log(Math.max(...dp[N - 1]));

    [풀이]

    둘째 줄부터 선택된 수의 합을 다 적어봤더니 규칙을 찾을 수 있었다.

    각 행의 첫 번째 숫자는 무조건 이전 행의 첫 번째 숫자와 더해야하고, 각 행의 마지막 숫자는 무조건 이전 행의 마지막 숫자와 더해야한다.

    맨 첫 번째와 마지막 숫자 사이의 숫자들의 합은 이전 행의 대각선 방향의 두 숫자 중에서 더 큰 수와 더하면 된다.

    풀이

    Tags
      © 2021 dmchoi, Powered By Gatsby.