세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다. 그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다. 괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
숫자를 추출한 배열과, 연산자를 추출한 배열을 만들고 이를 reduce 메서드를 통해서 계산하는 식으로 접근했다. 그러나 문제를 풀이하면서 내가 간과한 사실이 있었다. 단순히 더하는 것이 아니라 "최소값"을 만드는 프로그램을 작성하는 것이었다. 최소값이라면 빼기를 기준으로 더하기를 많이 한 숫자에 마이너스를 붙일수록 숫자는 작아진다는 것을 망각했고, 그 결과 단수한 더하기로 처음에 계산을 실시했다.
예제1은 그 결과 -35가 아니라 45가 나왔다. 그렇다면, 마이너스를 기준으로 주어진 내용을 분리하고, 이를 합산한 결과를 도출한다면 원하는 결과를 얻을 수 있을 것이다.
const n = require('fs').readFileSync('ex.txt').toString().trim().split("-")
const solution = n.map(el => el.split('+'))
.map(el => el.length === 1
? Number(el)
: el.map(els => Number(els)).reduce((pre, cur) => pre + cur))
console.log(solution.reduce((pre, cur) => pre - cur))