Algorithm/BOJ
[c++][BOJ][1541] 잃어버린 괄호
kim-hasa
2022. 3. 1. 15:34
https://www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
괄호가 없는 수식에 괄호를 씌워서 최대한 작은 숫자를 만드는 문제입니다.
+인 경우 그냥 더하다가 , -가 나오는 순간 괄호를 씌웁니다. 그 이후 , 덧셈은 계속 minusSum에 더해줍니다.
그러다 -가 나오는 순간 , 괄호를 앞에 씌워서 지금까지 더한 minusSum을 sum에서 빼줍니다.
또한 마찬가지로 minusSum을 0으로 만들고 다시 더합니다.
마지막에 숫자가 하나 남는데 , -가 있었다면 minusSum에 더하고 sum에서 빼줍니다.
-가 없었다면 그냥 sum에 더하고 리턴합니다.
#include <iostream>
#include <string>
using namespace std;
int main(){
string str;
cin >> str;
int index = 0;
bool minus = false;
int minusSum = 0;
string count;
int sum = 0;
while(str.length() > index){
char c = str[index];
if(c == '+'){
count = str.substr(0, index);
if(minus == false){
sum += stoi(count);
}
else {
minusSum += stoi(count);
}
str = str.substr(index+1);
index = 0;
}
else if(c == '-'){
count = str.substr(0, index);
if(minus == false){
minus = true;
sum += stoi(count);
}
else {
minusSum += stoi(count);
sum -= minusSum;
minusSum = 0;
}
str = str.substr(index+1);
index = 0;
}
else {
index++;
}
}
if(minus == false){
sum += stoi(str);
} else {
minusSum += stoi(str);
sum -= minusSum;
}
cout << sum;
}