https://school.programmers.co.kr/learn/courses/30/lessons/67257
+-* 연산이 있고 가장 큰 값이 나오도록 연산 우선순위를 정하는 문제이다.
100-200300-500+20가 있다면
-+ 순으로 하여 100-(200*300)-500+20 = |-60420|
이 가장 큰 값이다.
빡 구현문제인데 우선 연산자가 3개(-*+)이기 때문에 경우의 수는 3! = 6개이다.
그러므로 그냥 char[][] op를 만들어 6개의 경우를 넣어주었다.
import java.util.*;
class Solution {
static char[][] op={{'*','-','+'},{'*','+','-'},{'+','*','-'},{'+','-','*'},{'-','+','*'},{'-','*','+'}};
static long max=0;
public long solution(String expression) {
for(int i=0;i<6;i++){
calc(i,expression);
}
return max;
}
public void calc(int calcIndex,String expression){
//1번
StringBuilder num=new StringBuilder();
ArrayList<Long> number=new ArrayList<>();
ArrayList<Character> opList=new ArrayList<>();
for(char c:expression.toCharArray()){
if(c=='-'||c=='+'||c=='*'){
opList.add(c);
number.add(Long.parseLong(num.toString()));
num=new StringBuilder();
}else{
num.append(c);
}
}
number.add(Long.parseLong(num.toString()));
//2번
for(int i=0;i<3;i++){
char operator=op[calcIndex][i];
while(opList.size()!=0){
//2-1
int index=opList.indexOf(operator);
if(index==-1) break;
else{
switch(operator){
case '*':
number.add(index,number.get(index)*number.get(index+1));
break;
case '+':
number.add(index,number.get(index)+number.get(index+1));
break;
case '-':
number.add(index,number.get(index)-number.get(index+1));
break;
}
//2-2
number.remove(index+1);number.remove(index+1);
opList.remove(index);
}
}
}
//3
max=Math.max(max,Math.abs(number.get(0)));
}
}