https://programmers.co.kr/learn/courses/30/lessons/67257
long long computation(char c, long long a, long long b)
{
if(c == '+') return a + b;
if(c == '-') return a - b;
if(c == '*') return a * b;
}
long long solution(string expression) {
long long answer = 0;
vector<long long> numbers; // 숫자 저장
vector<char> operators; // 부호 저장
string temp = "";
for (int i = 0; i < expression.size(); ++i)
{
if (expression[i] == '+' || expression[i] == '-' || expression[i] == '*')
{
numbers.push_back(stoll(temp));
operators.push_back(expression[i]);
temp = "";
}
else
{
temp += expression[i];
}
}
numbers.push_back(stoll(temp));
string op = "+-*";
sort(op.begin(), op.end()); // permutation 을 쓰기 위해
do
{
vector<long long> temp_numbers = numbers;
vector<char> temp_operators = operators;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < temp_operators.size();)
{
if (op[i] == temp_operators[j]) // op 에서 우선순위가 정해졌다. 비교해서 현재의 부호와 우선순위가 같다면 연산한다.
{
long long result = computation(temp_operators[j], temp_numbers[j], temp_numbers[j + 1]);
temp_numbers.erase(temp_numbers.begin() + j);
temp_numbers.erase(temp_numbers.begin() + j);
temp_numbers.insert(temp_numbers.begin() + j, result);
temp_operators.erase(temp_operators.begin() + j);
}
else
{
j++;
}
}
}
answer = std::max(answer, abs(temp_numbers[0]));
} while (next_permutation(op.begin(), op.end()));
return answer;
}