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

최대 1 분 소요

1.문제 링크

[잃어버린괄호]](https://www.acmicpc.net/problem/1541)



2. 풀이 전 계획과 생각

  • 그리디



3. 풀이

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

int main(){
	string s; 
	cin>>s; // 입력  
	
	int ans=0;
	bool isMinus=false; // 뺄지 여부  
	int index=-1; // 문자열 순회 인덱스  
	int sindex=0; // string->int 바꾸기 위한 시작점  
	int cnt=1; // string->int 바꾸기 위한 문자열 자릿수  
	while(true){
		index++; 
		if(s[index]=='-'){ // - 일 경우  
			int num = stoi(s.substr(sindex,cnt)); // string->int 
			sindex = index+1; // sindex를 index+1로 초기화  
			cnt=0; // cnt=0 초기화  
			if(!isMinus){
				ans+=num; // 더하기  
				isMinus=true; // 이 다음 경우부터는 빼기  
			}
			else{
				ans = ans - num; // 빼야하는 경우 빼기  
			}
		}
		else if(s[index]=='+'){ // + 일 경 
			int num = stoi(s.substr(sindex, cnt)); // string->int 
			sindex = index+1; // sindex를 index+1로 초기화  
			cnt=0; // cnt=0 초기화 
			if(isMinus) ans = ans - num; // 빼야하는 경우 빼기  
			else ans += num; // 더하기  
		}
		else if(index==s.size()-1){ // 문자열 마지막 순회일 경우  
			int num = stoi(s.substr(sindex, cnt+1)); // string->int 
			if(isMinus) ans=ans-num; // 빼야하는 경우 빼기  
			else ans+=num; // 더하기  
			break; // 무한 반복문 빠져 나오기  
		}
		else{ // 숫자일 경우  
			cnt++; // cnt 1 증가  
			
		}
	}
	
	// 답 출력  
	cout<<ans;
}