재귀
가령 3*8+5
를 예를 들어보자. 괄호가 쓰이는 경우는 (38)+5 나, 3(8+5) 이다. 후위식을 먼저 해주느냐, 전위식을 먼저 하냐이다.
전위식은 인덱스를 따라 호출 해주면 되고, 후위식은 괄호부분을 먼저 계산한후, 이전까지의 계산 값을 같이 계산하면 된다.
#include <iostream>
#include <vector>
using namespace std;
int N, ans=-987654321;
vector<char> v;
vector<int> n;
void input() {
string str;
cin >> N >> str;
for (int i = 0; i < N; i++) {
if (str[i] == '-' || str[i] == '*' || str[i] == '+') v.push_back(str[i]);
else n.push_back(str[i] - '0');
}
}
int cal(int fr, char op, int back) {
switch (op) {
case '+' :
return fr + back;
case '-' :
return fr - back;
case '*' :
return fr * back;
}
}
void dfs(int idx, int num) {
if (idx >= N / 2) {
ans = max(ans, num);
return;
}
dfs(idx + 1, cal(num, v[idx], n[idx + 1]));
if (idx + 2 <= N / 2) dfs(idx + 2, cal(num, v[idx], cal(n[idx + 1], v[idx + 1], n[idx + 2])));
}
void output() {
cout << ans;
}
int main() {
input();
dfs(0, n[0]);
output();
}