양수, +, -로 구성된 식에 적절한 괄호를 추가해 결과 값을 최소로 만드는 경우의 값을 출력한다.
-가 등장하는 순간 그 뒤에 + 식을 전부 괄호로 묶으면 괄호 안의 결과 값을 빼는 모습이 된다.
즉 -가 등장하기 전 까지의 합과, 등장한 후의 합을 빼면 그 결과 값은 항상 최소값이 된다.
굳이 어려운 점을 따지자면 문자열을 입력받아 연산자와 피연산자를 나누는게 어려운부분..?
#include <iostream>
#include <stack>
#include <cstring>
using namespace std;
const int MAX = 50;
char input[MAX+1];
int main()
{
cin >> input;
stack<int> opnd;
bool foundMinus = false;
int digit = 0;
char oper = '+';
for (int i = 0; true; i++)
{
if (input[i] == 0)
{
if (foundMinus)
digit *= -1;
opnd.push(digit);
while (opnd.size() > 1)
{
int opnd1 = opnd.top(); opnd.pop();
int opnd2 = opnd.top(); opnd.pop();
opnd.push(opnd1 + opnd2);
}
break;
}
else if ('0' <= input[i] && input[i] <= '9')
digit = (digit * 10) + (input[i] - '0');
else
{
oper = input[i];
if (foundMinus)
digit *= -1;
if (oper == '-')
foundMinus = true;
opnd.push(digit);
digit = 0;
}
}
cout << opnd.top();
return 0;
}
2019-03-08 02:37:16에 Tistory에서 작성되었습니다.