[C++]伯俊1541,失われた括弧


白駿1541
アルゴリズム分類:greedyアルゴリズム(greedyアルゴリズム)
カッコのない数式にカッコを付けて、数式の値を最小限に抑える問題.
この問題を解決するには、どのような場合に最小値が必要かを知る必要があります.
  • 55-50+40 -> 55-(50+40)
  • 10+20-30+40-50 -> 10+20-(30+40)-50
  • 前の2つの場合、各式の値は最小です.よく見ると、-記号が表示された後の数値は、最小値を決定するためにマイナス記号が必要です.
    isminusがtrueの場合result-=stoi(num)
    isminusがfalseの場合result+=stoi(num)
    繰り返し文はi=inputです.最後の数字に対応する演算を実行するためsize()に進みます.
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main(){
    	string input,num;
    	int result=0;
    	bool isminus=false;
    	cin >> input;
    	
    	for(int i=0; i<=input.size(); i++){
    		if(input[i]=='+'||input[i]=='-'||i==input.size()){
    			if(isminus){
    				result-=stoi(num);
    				num="";
    			}
    			else{
    				result+=stoi(num);
    				num="";
    			}
    		}
    		else{
    			num+=input[i];
    		}
    		if(input[i]=='-'){
    			isminus=true; //input[i]가 '-'인 경우, isminus=true;
    		}
    	}
    	
    	cout << result;
    }