[백준/C++] 1541번 잃어버린 괄호

2021. 2. 22. 21:10알고리즘/구현

728x90
반응형

문제: www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

 

 

문제풀이

 

문제의 분류는 그리디 알고리즘이지만

문자열 처리만으로 풀 수 있는 문제였다.

 

식의 '-' 연산을 만나기 전까지의 수는 계속 더해주고 '-' 연산을 만난 후 부터는 '+' 연산을 만나든 '-' 연산을 만나든 관계없이 빼주면된다.

 

예를 들어

 

10+10+10-10+10+1010+10+10-(10+10+10) 즉, 10+10+10-10-10-10 이 된다.

 

 

코드

#include <iostream>

using namespace std;

int main(){
    ios::sync_with_stdio(false); cin.tie(nullptr);

    string str;
    cin>>str;
    
    string temp; //수 저장
    int result = 0; //결과값
    bool minus = false; // - 연산을 만났는지 여부

    for(int i=0; i<str.size(); i++){
        if((str[i] == '+'||str[i] == '-')&&!minus){ // '-' 연산을 만난 직후의 수까지 모두 더한다.
            result += stoi(temp);
            temp.clear();
        }
        else if((str[i] == '+'||str[i] == '-')&&minus){ //'-' 연산을 만난 후에는 모두 뺀다.
            result -= stoi(temp);
            temp.clear();
        }
        else
            temp += str[i];

        if(str[i] == '-') //'-' 연산을 만나면 true
            minus = true;
    }

    if(minus) //for문이 끝나고 마지막의 수를 더하거나 빼준다.
        result -= stoi(temp);
    else
        result += stoi(temp);

    cout<<result;

    return 0;
}

 

 

결과

728x90
반응형

'알고리즘 > 구현' 카테고리의 다른 글

[백준/C++] 5525번 IOIOI  (0) 2021.02.25
[백준/C++] 1780번 종이의 개수  (0) 2021.02.23
[백준/C++] 1260번 DFS와 BFS  (0) 2021.02.21
[백준/C++] 9375번 패션왕 신해빈  (0) 2021.02.16
[백준/C++] 11723번 집합  (0) 2021.02.04