[백준] 잃어버린 괄호 1541 c++

2022. 7. 6. 23:09알고리즘/백준

728x90

1. 95%에서 멈추는 현상 (1개를 넣었을 때 예외 처리해야 됨)

 

1. 숫자랑 기호를 구별한다.

2. 만약에 +가 있다면 앞뒤로 더해서 새로운 배열에 넣는다. 

3. 마지막 기호가 -,+에 따라서 마지막 배열에 더 해줄지, 추가할지 정한다. 

4. 배열에 있는 수들은 이제 계속 빼 주면 된다. 

 

#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector <long long int> vec;
vector <char> pm;
vector <long long int> k;
string str, tmp;
int main() {

	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);


	cin >> str;

	long long int point = 0;
	for (long long int i = 0; i < str.size(); i++) {
		if (str[i] == '+' || str[i] == '-') {
			long long int q = stoi(tmp);
			vec.push_back(q);
			pm.push_back(str[i]);
			tmp = "";
		}
		else {
			tmp += str[i];
		}

 
	}

	long long int q = stoi(tmp);
	vec.push_back(q);
	if (pm.size() == 0) {
		cout << vec[0];
		return 0;
	}
	//숫자 문자 구분 완료
	for (long long int i = 0; i < pm.size(); i++) {
		if (pm[i] == '+') {
			
			long long int sum = vec[i];
			while (true) { //+한개이상일때 처리

				if (i == pm.size() ||pm[i] == '-') {
					k.push_back(sum);
					break;
				}
				sum += vec[i+1];
				i++;
			}
		}
		else {
			k.push_back(vec[i]);
		}
	}//+= 처리해서 k에 넣기 

	
	
	if(pm[pm.size()-1]=='-'){
		k.push_back(vec[vec.size() - 1]);
	}
	

	if (k.size() == 1) {
		cout << k[0];
		return 0;
	}
	long long int result = k[0];
	for (long long int i = 1; i < k.size(); i++) {
		result -= k[i];
	}

	cout << result;
	

}
728x90

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 1927 최소 힙 c++  (0) 2022.07.08
[백준] 1780 종이의 개수 (c++)  (0) 2022.07.07
[백준] 11444 피보나치 수 6  (0) 2022.07.05
[백준] 11727 2×n 타일링 2 c++  (0) 2022.07.04
[백준] 11726 2×n 타일링 c++  (0) 2022.07.04