[programmers][X] 수식 최대화
in Algorithm on Algorithm
https://school.programmers.co.kr/learn/courses/30/lessons/67257
import java.util.*;
class Solution {
List<Long> nList = new ArrayList<>();
List<Character> oList = new ArrayList<>();
public long solution(String expression) {
long answer = 0;
StringBuilder number = new StringBuilder();
for(char e : expression.toCharArray()){
if( Character.isDigit(e) ){
number.append(e);
}else{
oList.add(e);
nList.add(Long.valueOf(number.toString()));
number.delete(0, number.length());
}
}
nList.add(Long.valueOf(number.toString()));
answer = Math.max(answer, cal(new char[]{'+','-','*'}));
answer = Math.max(answer, cal(new char[]{'+','*','-'}));
answer = Math.max(answer, cal(new char[]{'-','+','*'}));
answer = Math.max(answer, cal(new char[]{'-','*','+'}));
answer = Math.max(answer, cal(new char[]{'*','+','-'}));
answer = Math.max(answer, cal(new char[]{'*','-','+'}));
return answer;
}
public long cal(char[] operators){
List<Long> nl = new ArrayList<>(nList);
List<Character> ol = new ArrayList<>(oList);
for(char o : operators){
int nidx = 1;
int oidx = 0;
while(oidx < ol.size()){
if(o == ol.get(oidx)){
nl.set(nidx, cal(nl.get(nidx-1), nl.get(nidx), ol.get(oidx)));
nl.remove(nidx-1);
ol.remove(oidx);
}else{
nidx++;
oidx++;
}
}
}
return Math.abs(nl.get(0));
}
private static Long cal(Long a, Long b, char c){
if(c == '-') return a - b;
else if(c == '+') return a + b;
else return a * b;
}
}