+와 - 연산자만이 주어졌을 때 주어진 식에 괄호를 처서 최소값을 출력하는 문제.
모든 +식에 괄호를 치고 -를 나중에 계산하는 방식으로 최소값을 만들 수 있다.
문제 풀이를 두 파트로 나누어 진행하였다.
1. string으로 주어지는 수식 분해
2. 숫자 계산
간단한 문제인데 마지막 뺄셈 과정의 반복문에 stack.size()를 변수로 사용하는 실수를 해서, 생각보다 오래 걸렸음..
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main() {
string s;
cin >> s;
int idx = 0;
int num[101] = { 0, };
string tmpnum = "";
char opr[51] = { 0, };
for (int i = 0; i < s.length(); i++) {
if (s[i] == '+') { opr[idx] = '+'; num[idx] = stoi(tmpnum); tmpnum = ""; }
else if (s[i] == '-') { opr[idx] = '-'; num[idx] = stoi(tmpnum); tmpnum = ""; }
else { tmpnum += s[i]; continue; }
idx++;
}
num[idx] = stoi(tmpnum);
stack<int> stack;
int tmp = 0;
stack.push(num[0]);
int i = 0;
while (opr[i] != 0) {
if (opr[i] == '+') {
tmp = stack.top() + num[i+1];
stack.pop();
stack.push(tmp);
}
else if (opr[i] == '-') {
stack.push(num[i + 1]);
}
i++;
}
int sum=0;
int stack_size = stack.size();
for (int j = 0; j < stack_size -1; j++) {
sum -= stack.top();
stack.pop();
}
cout << (sum + stack.top());
}