풀이 소요시간 : 우웩
따라서 굳이 set
같은 자료구조로 종류를 파악하지 말고 전역변수에 다 넣어두자.
괜히 한번에 저장하고 관리했다가 끔찍한 core dump
를 맛보았다.
요즘 정신놓고 신경 안쓰다가 말아먹는 경우가 종종 많아진듯 하다. 정신좀 차리자.
정리를 안해두니까 헷갈리는 경우가 빈번하다.
include <string>
#include <vector>
#include <cmath>
#include <sstream>
using namespace std;
char Oper[3] = {'-', '+', '*'};
vector<char> OP;
int Visit[3];
string Exp;
long long Ans = 0;
void Update_Max() {
vector<long long> Num_Temp;
vector<char> Oper_Temp;
string token = "";
for(int i = 0; i < Exp.length(); i++)
{
if(Exp[i] >= '0' && Exp[i] <= '9')
{
token += Exp[i];
}
else
{
Num_Temp.push_back((long long)stoi(token));
Oper_Temp.push_back(Exp[i]);
token = "";
}
}
Num_Temp.push_back((long long)stoi(token));
//Temp 초기화
for(int op = 0; op < 3; op++)
{
char Curr_OP = OP[op];
for(int i = 0; i < Oper_Temp.size(); i++)
{
if(Oper_Temp[i] == Curr_OP)
{
long long prev = Num_Temp[i];
long long next = Num_Temp[i + 1];
long long Fin;
if(Curr_OP == '+') Fin = prev + next;
else if(Curr_OP == '-') Fin = prev - next;
else if(Curr_OP == '*') Fin = prev * next;
Num_Temp[i] = Fin;
Num_Temp.erase(Num_Temp.begin() + (i + 1));
Oper_Temp.erase(Oper_Temp.begin() + i);
i--;
}
}
}
Ans = max(Ans, abs(Num_Temp[0]));
}
//연산자 모든 경우의 수 조합
void Make_Priority(int Count) {
if(Count == 3)
{
Update_Max();
return;
}
for(int i = 0; i < 3; i++)
{
if(Visit[i] == 1) continue;
Visit[i] = 1;
OP.push_back(Oper[i]);
Make_Priority(Count + 1);
Visit[i] = 0;
OP.pop_back();
}
}
long long solution(string expression) {
Exp = expression;
Make_Priority(0);
return Ans;
}