๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/9465
ํ์ด
์ฒ์์๋ dp(๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ) ์ ์๊ฐํ์ง ๋ชปํ์ฌ ๊ณ ์ ํ๋ค.
์ฌ๊ธฐ์ map์ ์คํฐ์ปค๋ค์ ๋ฐฐ์ด์ ์๋ฏธํ๊ณ
dp[0][i] ๋ ์ฒซ๋ฒ์งธ์ค์ i+1๋ฒ์งธ ์คํฐ์ปค ์ฌ์ฉํ์ ๋ ๊ฐ์ง ์ ์๋ ์ต๋ ์ด์
dp[1][i] ๋ ๋๋ฒ์งธ์ค์ i+1๋ฒ์งธ ์คํฐ์ปค๋ฅผ ์ฌ์ฉํ์ ๊ฐ์ง ์ ์๋ ์ต๋ ์ด์
dp[2][i] ๋ i+1๋ฒ์งธ์ ์คํฐ์ปค ์ด๋๊ฒ๋ ์ฌ์ฉํ์ง ์์์ ๋ ๊ฐ์ง ์ ์๋ ์ต๋ ์ด์ ์ด๋ค.
dp[0][0] dp[1][0] dp[2][0] ๋ถํฐ ๋ง์ง๋ง ์ด๊น์ง ์งํํ๋ฉด ๋์ฌ ์ ์๋ ์ต๋ ์ ์๋ค์(dp[0][n-1], dp[1][n-1], dp[2][n-1]) ๊ตฌํ ์ ์๊ณ dp[0][n-1], dp[1][n-1], dp[2][n-1] ๊ฐ์ค ์ต๋ ๊ฐ์ด ๋ต์ด ๋๋ค.
let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
let [caseCnt, ...arr] = input;
for (let i = 0; i < arr.length; i += 3) {
let n = Number(arr[i]);
let map = [];
map.push(arr[i + 1].split(" ").map((num) => Number(num)));
map.push(arr[i + 2].split(" ").map((num) => Number(num)));
let dp = Array.from({ length: 3 }, () => {
return Array(n).fill(0);
});
dp[0][0] = map[0][0];
dp[1][0] = map[1][0];
dp[2][0] = 0;
for (let j = 1; j < n; ++j) {
dp[0][j] = map[0][j] + Math.max(dp[1][j - 1], dp[2][j - 1]);
dp[1][j] = map[1][j] + Math.max(dp[0][j - 1], dp[2][j - 1]);
dp[2][j] = Math.max(dp[0][j - 1], dp[1][j - 1]);
}
let max = Math.max(dp[0][n - 1], dp[1][n - 1], dp[2][n - 1]);
console.log(max);
}
'๐Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค [node.js] > 1916๋ฒ ์ต์ ๋น์ฉ ๊ตฌํ๊ธฐ (1) | 2024.11.16 |
---|---|
๋ฐฑ์ค[node.js] > 11660๋ฒ ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ5 (0) | 2024.11.14 |
๋ฐฑ์ค[node.js] > 1181๋ฒ ๋จ์ด ์ ๋ ฌ (0) | 2024.11.12 |
๋ฐฑ์ค[node.js] > 1149 RGB๊ฑฐ๋ฆฌ (0) | 2024.11.11 |
๋ฐฑ์ค[node.js] > 1141๋ฒ ์ ๋์ฌ (0) | 2024.11.10 |