세준이는 양수와 +,-, 그리고 괄호를 가지고 길이가 최대 50인 식을 만들었다.그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
첫째 줄에 식이 주어진다. 식은 '0'~'9','+', 그리고 '-' 만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다.
첫째 줄에 정답을 출력한다. .
55-50+40
-35
계산값이 최소가 되도록 괄호를 묶는 문제이다.
연산기호는 -와 + 밖에 없다. 계산한 결과값에 -값을 붙이면 가장 최소의 값을 얻을 수 있다. 가령 예제 입력에서는 55-(50+40) 와 같이 묶어준다.
코드에서는 연산자인 경우와 피연산자인 경우를 나누어 주었으며, 이전 연산자가 -인지의 여부에 따라 결과값을 음수로 바꿔주었다.
#include<iostream>
#include<string>
using namespace std;
int main() {
string equation;
cin >> equation;
int result=0;
string temp;
bool isMinus = false;
for (int i = 0; i <= equation.size(); i++) {
//연산자 일 경우
if (equation[i] == '+' || equation[i] == '-' || equation[i] == '\0') {
if (isMinus) //숫자 앞에 -가 있었다면
result -= stoi(temp); //결과 값에 - 를 붙여준다.
else
result += stoi(temp);
if (equation[i] == '-')
isMinus = true;
temp = ' ';
}
else //피연산자인 경우
temp += equation[i];
}
cout << result;
return 0;
}