https://programmers.co.kr/learn/courses/30/lessons/67257
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
long long calculate(long long a, long long b, char ch)
{
if (ch == '+') return a + b;
else if (ch == '-') return a - b;
else return a*b;
}
long long solution(string expression) {
long long answer = 0;
vector<char> vOpe = { '-','*','+' };
sort(vOpe.begin(), vOpe.end());
vector<long long> vNumber;
vector<char> vCHARAC;
string sTemp;
for (int i = 0; i < expression.size(); i++)
{
if (expression[i] >= '0' && expression[i] <= '9')
{
sTemp += expression[i];
}
else
{
vCHARAC.push_back(expression[i]);
vNumber.push_back(stoll(sTemp));
sTemp = "";
}
if (i == expression.size() - 1)
{
vNumber.push_back(stoll(sTemp));
}
}
do {
vector<char> vCHAR = vCHARAC;
vector<long long> vNum = vNumber;
for (int i = 0; i < 3; i++)//덧쁠마
{
for (int j = 0; j < vCHAR.size(); j++)
{
if (vOpe[i] == vCHAR[j])
{
long long First = vNum[j];
long long Second = vNum[j + 1];
long long TempCal = calculate(First, Second, vCHAR[j]);//j와 j+1을 계산한다.
vNum[j] = TempCal;//계산해서 덮어씌운다 j에
vNum.erase(vNum.begin() + j + 1);//j+1 vNum은 없앤다.
vCHAR.erase(vCHAR.begin() + j);//계산한 문자없앤다.
j--;//없앤거 반복문을 위해 --해줘야함
}
}
}
long long TempMax = abs(vNum[0]);
answer = max(TempMax, answer);
} while (next_permutation(vOpe.begin(), vOpe.end()));
return answer;
}
int main()
{
string sTemp = "100-200*300-500+20";
long long vResult = solution(sTemp);
return 0;
}