코딩테스트
[프로그래머스] 수식최대화
_서리__
2023. 5. 3. 10:27
function solution(expression) {
//연산자의 우선순위를 자유롭게 재정의 할 수 있음. 같은 순위는 불가능! 계산된 결과가 음수 -> 절댓값으로 변환
// 가장 큰 참가자가 우승자.
//우승 시 가장 큰 상금금액을 리턴하세요~~~!!!
//uh..umm...다 해볼 수 밖에 없을 것같음...
// 같은 연산자 끼리는 앞에 있는 것이 우선순위가 높다
var answer = 0;
let num = '';
let arr = []
for(let i=0;i<expression.length;i++){
if(expression[i]==='-'||expression[i]==='+'||expression[i]==='*'){
arr.push(num)
arr.push(expression[i])
num = ''
}else{
num+=expression[i]
}
}
arr.push(num)
let arr1 = plus(minus(multi(arr)))
let arr2 = plus(multi(minus(arr)))
let arr3 = minus(plus(multi(arr)))
let arr4 = minus(multi(plus(arr)))
let arr5 = multi(minus(plus(arr)))
let arr6 = multi(plus(minus(arr)))
let answerArr = [...arr1,...arr2,...arr3,...arr4,...arr5,...arr6]
answerArr = answerArr.map((el)=>Math.abs(el))
return Math.max(...answerArr);
}
function plus(arr){
let newArr = []
let arr2 = arr.slice()
for(let i=0;i<arr2.length;i++){
if(arr[i]==='+'){
newArr.pop()
arr2[i+1] = Number(arr2[i-1])+Number(arr2[i+1])
}else{
newArr.push(arr2[i])
}
}
return newArr;
}
function multi(arr){
let newArr = []
let arr2 = arr.slice()
for(let i=0;i<arr2.length;i++){
if(arr[i]==='*'){
newArr.pop()
arr2[i+1] = Number(arr2[i-1])*Number(arr2[i+1])
}else{
newArr.push(arr2[i])
}
}
return newArr;
}
function minus(arr){
let newArr = []
let arr2 = arr.slice()
for(let i=0;i<arr2.length;i++){
if(arr[i]==='-'){
newArr.pop()
arr2[i+1] = Number(arr2[i-1])-Number(arr2[i+1])
}else{
newArr.push(arr2[i])
}
}
return newArr;
}