728x90
괄호를 적절히 쳐서 최소값을 만드는 문제입니다.
연산자는 같은것이 연속해서 나올 수 없기 때문에
+가 나온 후에는 -가 나올 수 밖에 없고,
-가 나온 후에는 +가 나올 수 밖에 없습니다.
-가 후에 나온 +는 괄호를 통해서 묶을 수 있습니다.
ex 100 + 20 - (30 + 60) - (20 + 40)
그러므로 처음 나온 연산자가 -면 전부 -처리해주면 되고,
+면 한번 +연산해주고, 그다음 부터는 모든 값들을 - 연산해주면 됩니다.
#include <iostream>
#include <string>
using namespace std;
int num = 0;
int m = 0;
string tmp = "";
string s;
void solve(void)
{
for (int i = 0; i <= s.size(); ++i){
if (s[i] == '+' || s[i] == '-' || s[i] == '\0'){
if (m) {
num -= stoi(tmp);
}
else {
num += stoi(tmp);
}
if (s[i] == '-') {
m = 1;
}
tmp = "";
continue;
}
tmp += s[i];
}
}
int main(int argc, char *argv[])
{
cin >> s;
solve();
cout << num << endl;
return 0;
}
'알고리즘' 카테고리의 다른 글
[C++] 백준 1037번 약수 (0) | 2019.09.02 |
---|---|
[C++] 백준 5086번 배수와 약수 (0) | 2019.09.02 |
[C++] 백준 1436번 영화감독 숌 (0) | 2019.09.02 |
[C++] 백준 1018번 체스판 다시 칠하기 (0) | 2019.09.02 |
[C++] 백준 7568번 덩치 (0) | 2019.09.02 |