티스토리 뷰

www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net

주어진 식에서 '-' 연산자로 묶일 수 있는 부분을 모두 괄호안에 두면 식의 결과값이 최소가 됩니다.

 

예시)

5+7-4+3+6-2+2 => 5+7-(4+3+6)-(2+2)

 

사실, 첫 '-' 연산자 뒤에 식은 거들떠 볼 필요도 없이 모두 음수로 두면됩니다.

코드

#include <iostream>
#include <string>
using namespace std;
int main()
{
    //freopen("1541.txt", "r", stdin);
    string equation;
    cin >> equation;

    int i = 0;
    int num = 0;
    int answer = 0;
    bool flag = false;

    while(i < equation.size())
    {
        int n = min(equation.find('+', i), equation.find('-', i));
        if(n == -1) 
            n = equation.size();

        num = stoi(equation.substr(i, n-i));// [pos, pos + count)

        if(flag)
        {
            answer -= num;
        }
        else
        {
            answer += num;
            if(equation[n] == '-') 
                flag = true;
        }
        
        i = n + 1;
    }
    
    cout << answer;
    return 0;
}

'Problem Solving > 백준 온라인 저지' 카테고리의 다른 글

7662 - 이중 우선 순위 큐  (0) 2021.03.07
1197-최소 스패닝 트리  (0) 2020.10.29
2884-알람 시계  (0) 2020.10.27
11724-연결 요소의 개수  (0) 2020.10.26
15657-N과 M (8)  (0) 2020.10.26
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함