괄호를 이용하여 최소값을 구하긴 위해서는 '-' 이후의 기호들은 전부 '-'로 계산해 주면 된다.
예를 들어 55 + 40 - 30 + 20 - 10
이란 식이 있다고 가정해보자.
위 식의 최소값은 55 + 40 - (30 + 20) - 10
= 55 + 40 - 30 - 20 - 10
과 같다.
즉, 제일 처음 나온 '-' 기호인 30 앞의 '-'를 기준으로 뒤의 기호는 모두 '-'로 계산해주면된다.
num
변수를 이용하여 string값을 저장하다가 기호가 오게 된다면 num
에 저장중이던 변수를 stoi
를 이용하여 result
에 반영해주었다. 이때, isMinus
즉, 마이너스가 단 한번이라도 나온 상태라면 result
에서 빼주고, 그렇지 않다면 더해주었다.
#include <iostream>
#include <string>
using namespace std;
void init() {
ios::sync_with_stdio(false);
cin.tie(0);
}
int main() {
init();
string input;
cin >> input;
int result = 0;
string num;
bool isMinus = false;
for (int i = 0; i <= input.size(); i++) {
// 기호가 오거나 마지막 자리 숫자라면
if (input[i] == '-' || input[i] == '+' || i == input.size()) {
if (isMinus) {
result -= stoi(num);
num = "";
}
else {
result += stoi(num);
num = "";
}
}
else { // 그렇지 않고 그냥 숫자가 온다면
num += input[i];
}
if (input[i] == '-') {
isMinus = true;
}
}
cout << result;
return 0;
}