• toc {:toc}

문제 확인하기

풀이

  • isdigit() 함수를 사용하여 문자열로 받은 입력이 숫자인지, 부호인지를 판별한다.

55-50+40 가 입력인 경우, 55-(50+40)와 같이 -가 나왔을 때, 뒤에 있는 +들을 괄호로 묶어 -로 만들어주면 된다. 이는 즉, -가 나온 경우 뒤에 나오는 모든 숫자들을 빼주면 되고, -가 나오지 않은 경우에는 전부 더해주면 된다.

55-50+40+30+20+10 이라면 55-(50+40+30+20+10) 이므로 전부 빼주면 된다.
55-(50+40+30)-(20+10) 이라면 55-(50+40+30)-(20+10) 이므로 중간에 -가 들어가도 -가 일단 한 번 들어가 있다면 뒷 숫자는 전부 빼주면 된다.

#include <bits/stdc++.h>
using namespace std;
 
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
 
    string input, num;
 
    cin >> input;
 
    int start = 0, temp=0, idx = 0, is_minus=0, res=0;
 
    // - +++의 경우, -가 연속되는 경우, 
    for(int i=0; i<input.length(); i++){
        if(isdigit(input[i])){
            temp = temp*10 + (input[i]-48);
        }
        else{
            if(is_minus==1){
                res -= temp;
            }
            else{
                if(input[i] == '-'){
                    is_minus = 1;
                    res += temp;
                }
                else{
                    res += temp;
                }
            }
            temp = 0;
        }
    }
    if(is_minus) res -= temp;
    else res += temp;
    
    cout << res << '\n';
 
    return 0;
}