
const fs = require('fs');
const path = process.platform === 'linux' ? '/dev/stdin' : 'input.txt';
const inputs = fs
.readFileSync(path)
.toString()
.trim()
.split('\n')
.map((it) => it.split(' ').map(Number));
const n = Number(inputs.shift());
const dp = Array.from({ length: n }, () => Array(3).fill(0));
const R = [];
const G = [];
const B = [];
for (const input of inputs) {
const [r, g, b] = input;
R.push(r);
G.push(g);
B.push(b);
}
dp[0] = [R[0], G[0], B[0]];
for (let i = 1; i < n; i++) {
dp[i][0] = Math.min(dp[i - 1][1], dp[i - 1][2]) + R[i];
dp[i][1] = Math.min(dp[i - 1][0], dp[i - 1][2]) + G[i];
dp[i][2] = Math.min(dp[i - 1][0], dp[i - 1][1]) + B[i];
}
console.log(Math.min(...dp[n - 1]));
⏰ 소요한 시간 : -
입력 받은 R, G, B값을 분리해 배열에 넣어준다.
그후 dp 배열 값을 채워줄 텐데, dp는 3차원 배열로 내가 현재 인덱스에서 r, g, b 각각을 칠했을 때 최소비용을 의미한다.
즉 dp[0]은 [0번 집이 r로 칠했을때의 값, 0번 집이 g로 칠했을때의 값, 0번 집이 b로 칠했을때의 값] 이 된다.
이후 반복하면서 dp 배열을 채워주면 된다.