순열, 구현 문제
너무 오래 걸리게 푼듯?
function perm(arr, selectNum){
let result = [];
if(selectNum === 1){
return arr.map((v)=>[v]);
}
arr.forEach((item, index, arr)=>{
const fixer = item;
const restArr = arr.filter((_, restIdx) => restIdx !== index);
const permutationArr = perm(restArr, selectNum-1);
const combineFixer = permutationArr.map((v)=>[fixer, ...v]);
result.push(...combineFixer);
});
return result;
}
function solution(expression) {
var answer = 0;
let oper = expression.split(/[0-9]+/g).filter((e)=>e!='');
let sets = new Set(oper);
let array = Array.from(sets);
let arr = perm(array, array.length);
//console.log(arr);
let max = -1;
let test = expression;
let express = expression.split(/([-+*])/g).filter((e)=>e!='');
//console.log(express)
arr.forEach((item, idx2)=>{
let express2 = express.slice();
//console.log(idx2+1)
item.forEach((v,idxtest)=>{
//let s1 = express2.indexOf(v);
//console.log('express2',express2)
let s2 = express2.map((v1,idx)=> {
if(v1 === v){
return idx;
}
}).filter((v3)=>v3!=undefined);
if(s2.length >= 2){
s2 = s2.map((v,idx3)=>{
if(idx3>=1){
return v-2*idx3;
}
else {
return v;
}
})
}
//console.log(s2)
s2.forEach((s1)=>{
if(v==='-'){
express2[s1+1] = parseInt(express2[s1-1]) - parseInt(express2[s1+1]);
}
else if(v==='*'){
express2[s1+1] = parseInt(express2[s1-1]) * parseInt(express2[s1+1]);
}
else if(v==='+'){
express2[s1+1] = parseInt(express2[s1-1]) + parseInt(express2[s1+1]);
}
express2.splice(s1-1,1);
express2.splice(s1-1,1);
// console.log(express2)
});
});
max = Math.max(Math.abs(express2[0]), max);
test = expression;
});
console.log(max)
return max;
}