가능한 연산자 조합의 숫자가 6개로 정해져 있어서, 각 조합의 계산값을 구한 후 가장 큰 값을 리턴하면 된다.
다른 사람 풀이를 보니 대체로 다 비슷하게 푼 것 같음.
모든 프로그래머스 문제 관련 코드들은 GitHub 링크 에 있음.
const calculate = (weight, expression) => {
// 우선순위 연산자부터 계산
weight.map(w => {
for (let i = 1; i < expression.length - 1; i++) {
if (expression[i] === w) {
let num1 = Number(expression[i - 1]);
let num2 = Number(expression[i + 1]);
if (w === '*') {
expression.splice(i - 1, 3, num1 * num2);
} else if (w === '+') {
expression.splice(i - 1, 3, num1 + num2);
} else if (w === '-') {
expression.splice(i - 1, 3, num1 - num2);
}
i--;
}
}
});
return Math.abs(expression[0]);
}
function solution(expression) {
const allWeight = [
['*', '+', '-'],
['*', '-', '+'],
['+', '*', '-'],
['+', '-', '*'],
['-', '*', '+'],
['-', '+', '*'],
];
// expression 을 array 로 변경
const arrExp = expression.replace(/\*|\+|-/g, match => ` ${match} `).split(' ');
// 모든 경우에 대한 계산값을 구한 후 가장 큰 값 리턴
return Math.max(...allWeight.map(weight => calculate(weight, [...arrExp])));
}