해당 알고리즘 자료는 제가 직접 푼 것도 있지만 다른 분들의 풀이과의 비교를 통해 더 나은 알고리즘을 공부하기 위해 정리한 것들입니다.
https://programmers.co.kr/learn/courses/30/lessons/67257
풀이 : 문자열과 연산을 분리하여 연산의 우선순위의 경우에 맞춰 계산 후 최대값을 찾는다.
import java.util.*;
class Solution {
public long solution(String expression) {
String [] arr = {"*+-", "*-+", "-+*", "-*+", "+-*", "+*-"};
ArrayList <Long> num = new ArrayList<Long>();
ArrayList <Character> oper = new ArrayList<Character>();
String s = "";
for (int i = 0; i < expression.length(); i++) {
char ch = expression.charAt(i);
if(ch == '-' || ch == '+' || ch == '*') {
num.add(Long.parseLong(s));
s = "";
oper.add(ch);
}else
s += String.valueOf(ch);
}
num.add(Long.parseLong(s));
long answer = 0;
for (int i = 0; i < arr.length; i++) {
ArrayList <Long> numclone = (ArrayList <Long>)num.clone();
ArrayList <Character> operclone = (ArrayList <Character>)oper.clone();
for (int j = 0; j < arr[i].length(); j++) {
char ch = arr[i].charAt(j);
while(operclone.contains(ch)) {
int idx = operclone.indexOf(ch);
long result = 0;
switch (ch) {
case '+':
result = numclone.get(idx) + numclone.get(idx+1);
break;
case '-':
result = numclone.get(idx) - numclone.get(idx+1);
break;
case '*':
result = numclone.get(idx) * numclone.get(idx+1);
break;
}
operclone.remove(idx);
numclone.remove(idx);
numclone.remove(idx);
numclone.add(idx, result);
}
}
if(answer < Math.abs(numclone.get(0))) answer = Math.abs(numclone.get(0));
}
return answer;
}
}