#include <iostream>
#include <vector>
using namespace std;

int main() {
	string n;
	cin >> n;

	vector<int> num;
	vector<char> oper;

	int tempNum = 0;
	for (int i = 0; i < n.size(); ++i) {
		if (isalnum(n[i])) {
			tempNum = tempNum * 10 + (n[i] - '0');
		}
		else {
			oper.push_back(n[i]);
			num.push_back(tempNum);
			tempNum = 0;
		}
	}
	num.push_back(tempNum);

	int result = 0;
	bool isBracket = false;		// - 이면 true, 괄호 안 인가?
	int tempResult = 0;

	for (int i = 0; i < num.size(); ++i) {
		if (i > 0 && oper[i - 1] == '-') {
			if (!isBracket) {
				isBracket = true;
				tempResult += num[i];
			}
			else if (isBracket) {
				result -= (tempResult + num[i]);
				tempResult = 0;
			}
		}
		else if (!isBracket) 
			result += num[i];
		else if (isBracket) 
			tempResult += num[i];
	}
	result -= tempResult;
	cout << result;

	return 0;
}

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

'알고리즘 공부' 카테고리의 다른 글

백준 2606번 바이러스  (0) 2023.03.07
백준 1260번 DFS와 BFS  (0) 2023.03.07
백준 1026번 보물  (0) 2023.03.03
백준 11399번 ATM  (0) 2023.03.02
백준 1931번 회의실배정  (0) 2023.03.02