From f6cd0202418322ad2ef4e3a56647de3f72cfc1a8 Mon Sep 17 00:00:00 2001 From: 10o0o Date: Mon, 26 Feb 2024 20:29:33 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B4=84=ED=98=B8=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20/=20=EA=B3=A8=EB=93=9C3=20/=2020=EB=B6=84?= =?UTF-8?q?=20/=20O?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0_\354\265\234\354\236\254\354\204\240.js" | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 "week19/BOJ_16637/\352\264\204\355\230\270 \354\266\224\352\260\200\355\225\230\352\270\260_\354\265\234\354\236\254\354\204\240.js" diff --git "a/week19/BOJ_16637/\352\264\204\355\230\270 \354\266\224\352\260\200\355\225\230\352\270\260_\354\265\234\354\236\254\354\204\240.js" "b/week19/BOJ_16637/\352\264\204\355\230\270 \354\266\224\352\260\200\355\225\230\352\270\260_\354\265\234\354\236\254\354\204\240.js" new file mode 100644 index 0000000..5461732 --- /dev/null +++ "b/week19/BOJ_16637/\352\264\204\355\230\270 \354\266\224\352\260\200\355\225\230\352\270\260_\354\265\234\354\236\254\354\204\240.js" @@ -0,0 +1,66 @@ +/* eslint-disable no-multi-assign */ +/* eslint-disable no-shadow */ +const fs = require('fs'); + +const inputs = fs.readFileSync(process.env.LOGNAME === 'jake' ? './input.txt' : '/dev/stdin') + .toString().trim().split('\n'); + +const n = +inputs[0]; +const exp = inputs[1]; + +if (n === 1) { + console.log(exp); +} else { + const calculator = (n, symbol, m) => { + if (symbol === '+') return n + m; + if (symbol === '*') return n * m; + if (symbol === '-') return n - m; + + return null; + }; + + const dp = new Array((n + 1) / 2).fill().map(() => [-Infinity, Infinity]); + dp[0][0] = dp[0][1] = Number(exp[0]); + dp[1][0] = dp[1][1] = calculator(Number(exp[0]), exp[1], Number(exp[2])); + + for (let i = 1; i < ((n - 1) / 2); i += 1) { + const index = (i * 2) + 1; + const symbol = exp[index]; + const num = Number(exp[index + 1]); + + const left1 = calculator( + dp[i][0], + symbol, + num, + ); + + const left2 = calculator( + dp[i][1], + symbol, + num, + ); + + const partSum = calculator( + Number(exp[index - 1]), + symbol, + num, + ); + + const right1 = calculator( + dp[i - 1][0], + exp[index - 2], + partSum, + ); + + const right2 = calculator( + dp[i - 1][1], + exp[index - 2], + partSum, + ); + + dp[i + 1][0] = Math.max(dp[i + 1][0], left1, left2, right1, right2); + dp[i + 1][1] = Math.min(dp[i + 1][1], left1, left2, right1, right2); + } + + console.log(dp.pop()[0]); +}