연산자 우선 순위를 재정의해서 계산할 수 있는 가장 큰 값을 리턴하면 되는 문제이다.
자세한 문제 설명은 아래 링크로!
https://programmers.co.kr/learn/courses/30/lessons/67257
*,-,+로 만들 수 있는 우선순위는 6개이므로 경우의 수를 따로 구하지 않고 테이블을 만들어준다.
function solution(expression) {
let result = []
let table = [
['+', '-', '*'],
['+', '*', '-'],
['-', '+', '*'],
['-', '*', '+'],
['*', '+', '-'],
['*', '-', '+']
]
//계산 함수
const cal = (num1, num2, op) => {
if(op === '+') return Number(num1) + Number(num2)
if(op === '-') return Number(num1) - Number(num2)
if(op === '*') return Number(num1) * Number(num2)
}
table.forEach(arr => { //['+', '-', '*']
let nums = expression.split(/([-*+])/g)
//["100", "-", "200", "*", "300", "-", "500", "+", "20"]
arr.forEach(oper => { //'+'
//연산자일 때만
while(nums.includes(oper)) {
let idx = nums.indexOf(oper)
//계산된 값으로 교체
nums.splice(idx-1, 3, cal(nums[idx-1], nums[idx+1], oper))
}
})
result.push(Math.abs(nums[0]))
})
return Math.max(...result)
}