문제
문제점 해결
연산자 1개 일 땐 1! = 1가지, 2! = 2가지, 3! = 6가지의 조합을 만들어 최댓값을 return하도록 코딩하였다.
풀이
import java.util.*;
class Solution {
static List<String> exp, oper, result;
static boolean[] used;
static long answer;
public long solution(String expression) {
exp = new ArrayList<>();
oper = new ArrayList<>();
char[] tmp = expression.toCharArray();
String str = "", s;
for (int i = 0; i < tmp.length; i++) {
if(tmp[i] == '-' || tmp[i] == '+' || tmp[i] == '*') {
s = String.valueOf(tmp[i]);
exp.add(str);
exp.add(s);
if(!oper.contains(s)) oper.add(s);
str = "";
continue;
}
str += tmp[i];
if(i == tmp.length-1) exp.add(str);
}
result = new ArrayList<>();
used = new boolean[oper.size()];
priorityOper();
return answer;
}
static void priorityOper(){
if(result.size() == oper.size()) {
long res = calculation();
answer = res > answer ? res : answer;
return;
}
for (int i = 0; i < oper.size(); i++) {
if(!used[i]) {
used[i] = true;
result.add(oper.get(i));
priorityOper();
result.remove(oper.get(i));
used[i] = false;
}
}
}
static long calculation() {
List<String> temp = new ArrayList<>();
for (String str : exp) temp.add(str);
for (int i = 0; i < result.size(); i++) {
String op = result.get(i);
for (int j = 0; j < temp.size(); j++) {
if(temp.get(j).equals(op)) {
long a = Long.parseLong(temp.get(j-1));
long b = Long.parseLong(temp.get(j+1));
a = op(a, b, op);
temp.add(j-1, String.valueOf(a));
for (int k = 0; k < 3; k++) temp.remove(j);
j = 0;
}
}
}
return Math.abs(Long.parseLong(temp.get(0)));
}
static long op(long a, long b, String op) {
switch (op) {
case "+":
return a += b;
case "-":
return a -= b;
default:
return a *= b;
}
}
}