문제링크 : https://www.acmicpc.net/problem/1541
#include<cstdio>
#include<string>
using namespace std;
int main(){
// freopen("../input.txt","rt",stdin);
char s[52];
scanf("%s",s);
int res = 0;
int tmpSum = 0;
int minusFlag = 1;
for(int i=0; s[i]!='\0'; i++){
// -가 나올때 이전까지 저장되었던 값들을 Flag에 따라 뺴주거나 더해준다
// minus가 나온순간 minusFlag를 작동시킨다. 이후에는 이 Flag는 바뀔 일이 없다.
if(s[i] == '-'){
res += tmpSum * minusFlag;
tmpSum = 0;
minusFlag = -1;
}
else if(s[i] == '+'){
res += tmpSum * minusFlag;
tmpSum = 0;
}
else{
tmpSum = tmpSum*10 + (s[i]-'0');
}
}
res += tmpSum * minusFlag;
printf("%d\n",res);
return 0;
}
음수가 나왔을때, 음수가 나오기 전, 이렇게 케이스 분류를 하고 문제를 해결하면 잘 풀수 있는 문제이다. 또한 음수가 한번 나오면 다음 음수가 나오기 전까지 계속 빼준다는 것 또한 중요한 아이디어이다.