[백준]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