c++에서는 문자열로 받은 수식을 수식으로써 계산해주는 방법을 쉽게 찾을 수 없었습니다. 그래서 조금 더 어렵게 해결한 것 같습니다. 일단 메인 아이디어는 string으로 받은 수식을 '-'기준으로 나누고 각 나누어 놓은 요소들을 각각 계산해주는 것입니다. 그리고 그 결과들을 순서대로 벡터에 넣고, 맨 처음 요소만 result에 더해주고, 그 뒤에 값들은 '-'로 구분됬었기 때문에 뺄셈을 진행해줍니다. 이렇게 하면 최솟값을 구할 수 있습니다.
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
string str;
int start = 0;
int number = 0;
vector<string> strArr;
vector<string> calArr;
cin >> str;
for (int i = 0; i < str.size(); i++) {
if (str[i] == '-') {
strArr.push_back(str.substr(start, i-start));
start = i + 1;
}
}
strArr.push_back(str.substr(start, str.size()));
for (auto& cal : strArr) {
start = 0;
calArr.clear();
for (int i = 0; i < cal.size(); i++) {
if (cal[i] == '+') {
calArr.push_back(cal.substr(start, i - start));
start = i + 1;
}
}
calArr.push_back(cal.substr(start, cal.size()));
for (auto& num : calArr) {
int n = atoi(num.c_str());
number += n;
}
cal = to_string(number); // 숫자 -> 문자열
number = 0;
}
int result = 0;
result += atoi(strArr[0].c_str()); // 문자열 -> 숫자
strArr.erase(strArr.begin());
for (auto& cal : strArr) {
result -= atoi(cal.c_str());
}
cout << result;
return 0;
}