개발하는 kim-hasa

[c++][BOJ][1541] 잃어버린 괄호 본문

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;
}

'Algorithm > BOJ' 카테고리의 다른 글

[c++][BOJ][1620] 나는야 포켓몬 마스터 이다솜  (0) 2022.03.01
[c++][BOJ][5525] IOIOI  (0) 2022.03.01
[c++][BOJ][2606] 바이러스  (0) 2022.03.01
[c++][BOJ][2579] 계단 오르기  (0) 2022.03.01
[c++][BOJ][18111] 마인크래프트  (0) 2022.03.01