let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const sol = (input) => {
const N = +input[0];
const numbers = input[1].split(" ").map(Number);
const operator = input[2].split(" ").map(Number);
const operObj = {
0: (oper1, oper2) => oper1 + oper2,
1: (oper1, oper2) => oper1 - oper2,
2: (oper1, oper2) => oper1 * oper2,
3: (oper1, oper2) => {
if (oper1 < 0) {
return -Math.floor(-oper1 / oper2);
}
return Math.floor(oper1 / oper2);
}, // operObj 객체에 순차적으로 덧셈, 뺄셈, 곱셈, 나눗셈을 선언해둔다.
};
let min = Number.MAX_SAFE_INTEGER;
let max = Number.MIN_SAFE_INTEGER;
const tmp = [];
const dfs = (L) => {
if (L === N - 1) {
let sum = numbers[0];
for (let i = 0; i < tmp.length; i++) {
let next = numbers[i + 1];
sum = operObj[tmp[i]](sum, next);
}
if (sum > max) max = sum;
if (sum < min) min = sum;
} else {
for (let i = 0; i < 4; i++) {
if (!operator[i]) continue;
operator[i]--;
tmp.push(i);
dfs(L + 1);
operator[i]++;
tmp.pop();
}
}
};
dfs(0);
return [max, min].join("\n");
};
console.log(sol(input));
const operation = (oper, x, y) => {
if (oper === "+") {
return x + y;
} else if (oper === "-") {
return x - y;
} else if (oper === "*") {
return x * y;
} else {
if (x < 0) {
return -Math.floor(-x / y);
} else {
return Math.floor(x / y);
}
}
};
연산자를 받아서 다른 방식으로 처리했다.