[BOJ] 1541번 잃어버린 괄호 - C++

"그리디 알고리즘"

Posted by Yongmin on June 14, 2021

문제

잃어버린 괄호

풀이

적절한 괄호를 넣어서 최솟값을 만드는 것인데, 예를 들어 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);
    
    }




# # #