https://programmers.co.kr/learn/courses/30/lessons/67257
그냥 구현 문제...!
const permutation = (arr, selectNum) => {
let result = [];
if (selectNum === 1) return arr.map((v) => [v]);
arr.forEach((v, idx, arr) => {
const fixer = v;
const restArr = arr.filter((_, index) => index !== idx);
const permuationArr = permutation(restArr, selectNum - 1);
const combineFixer = permuationArr.map((v) => [fixer, ...v]);
result.push(...combineFixer);
});
return result;
};
const parseExpression = (expression) => {
const expressArr = [];
let tmp = "";
Array.from(expression).forEach((chr) => {
if (["*", "+", "-"].some((operator) => operator === chr)) {
expressArr.push(tmp);
expressArr.push(chr);
tmp = "";
} else {
tmp += chr;
}
});
expressArr.push(tmp);
return expressArr;
};
const sum = (arr) => arr.reduce((acc, curr) => acc + curr, 0);
const solution = (expression) => {
let answer = 0;
const operatorCombs = permutation(["*", "+", "-"], 3);
for (const operatorComb of operatorCombs) {
const expressArr = parseExpression(expression);
for (const operator of operatorComb) {
for (let i = 0; i < expressArr.length; i++) {
if (expressArr[i] === operator) {
if (operator === "*") {
const newValue =
Number(expressArr[i - 1]) * Number(expressArr[i + 1]);
expressArr.splice(i - 1, 3, newValue);
i -= 1;
} else if (operator === "-") {
const newValue =
Number(expressArr[i - 1]) - Number(expressArr[i + 1]);
expressArr.splice(i - 1, 3, newValue);
i -= 1;
} else if (operator === "+") {
const newValue =
Number(expressArr[i - 1]) + Number(expressArr[i + 1]);
expressArr.splice(i - 1, 3, newValue);
i -= 1;
}
}
}
}
answer = Math.max(answer, Math.abs(sum(expressArr)));
}
return answer;
};
'개발 > 알고리즘' 카테고리의 다른 글
[LeetCode] Rotate Array (0) | 2021.07.10 |
---|---|
[프로그래머스] 괄호변환 (2) | 2021.07.08 |
[LeetCode] Best Time to Buy and Sell Stock II (1) | 2021.07.01 |
[LeetCode] 111. Minimum Depth of Binary Tree (트리 깊이 구하기) (0) | 2021.03.15 |
[LeetCode] 101. Symmetric Tree (0) | 2021.01.27 |