+와 -만을 이용한 식을 입력받아 괄호를 적절히 넣어 가장 작은 수를 만드는 문제다.
괄호를 적절히 넣는다는 말은 그냥 계산 우선순위를 만들라는 것이고 가장 작은 수를 만들기 위해서는 숫자와 -사이에 괄호가 있다면 수가 -가 되어서 가장 작은 수가 될 것이다.
이 예제를 보면 결국
$$ 55-(50+40) $$
이러한 식이 되어 결과값이 35가 나오게 된다.
이는 이후 +가 나오면 위 식과 같이 한번에 -를 하게되고 만약 -가 나온다면 한 번 괄호를 닫았다가 다시 괄호를 열게된다. 즉, 이후 어떠한 연산자가 나오든지 상관없이 쭉 -연산만 진행해주면 된다. 따라서 minus에 관한 bool타입 변수를 만들어서 이를 확인하면 될 것 같다.
#include <bits/stdc++.h>
#define fastio ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define endl '\n'
using namespace std;
using ll = long long;
using pii = pair<int, int>;
int main() {
int res = 0;
string str, num;
bool minus = false;
cin >> str;
for(int i = 0; i <= str.length(); i++) {
if(str[i] == '-' || str[i] == '+' || i == str.length()) {
if(minus) res -= stoi(num);
else res += stoi(num);
num = "";
} else {
num += str[i];
}
if(str[i] == '-') minus = true;
}
cout << res << endl;
return 0;
}
'PS' 카테고리의 다른 글
[BOJ] 25501 재귀의 귀재 (0) | 2023.02.13 |
---|---|
[BOJ] 1094 막대기 (0) | 2023.02.12 |
[BOJ] 1013 Contact (0) | 2023.02.09 |
[BOJ] 4949 균형잡힌 세상 (0) | 2023.01.17 |
[BOJ] 1920 수 찾기 (0) | 2023.01.16 |