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;
}