문제
풀이
적절한 괄호를 넣어서 최솟값을 만드는 것인데, 예를 들어 30-50+40이 있으면, 30-(50+40)으로 괄호를 넣어 최솟값으로 만드는 것이다. 이는 결국 (-) 연산자 뒤의 숫자들을 다음 (-)연산자가 나올 때 까지 묶으면 되는데, 결국 최솟값을 만드는 방법은 (-)가 나온 순간부터 그 이후 연산자를 모두 -로 대체 하는 식으로 정답 도출이 가능하다. 숫자와 연산자로 된 문자열 처리하는 방법을 잘 알아두면 좋을 것 같다.
소스 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <vector>
using namespace std;
int main(){
string s;
getline(cin, s);
int tmp = 0;
int sum = 0;
bool minus = false;
for(int i = 0; i<=s.size(); i++){
if(s[i] == '-' || s[i] == '+' || i == s.size()){
if(minus == true){
sum = sum - tmp;
tmp = 0;
}
else{
sum = sum + tmp;
tmp = 0;
}
if(s[i] == '-') minus = true;
}
else{
tmp = tmp * 10;
tmp = tmp + (s[i] - '0');
}
}
printf("%d\n", sum);
}