[백준] 1541 잃어버린 괄호

0

백준

목록 보기
246/271
post-thumbnail
post-custom-banner

[백준] 1541 잃어버린 괄호

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

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);

	//(+ 무조건 괄호)-(+ 무조건 괄호)-(+ 무조건 괄호)
	//- 나오기 전까지 + 무조건 괄호 (다른 선택지 없음)
	//- 나오면 다음 -까지 + 무조건 괄호 (빼지는 수 최대 되도록)

	string input;
	cin >> input;
	int answer = 0;

	string tempStr = ""; //괄호 속 값 계산을 위한 string
	int temp = 0; //괄호 속 값 계산

	bool minus = false; //괄호 속 값 앞 -있는지 여부

	int len = input.length();
	for (int i = 0; i < len; ++i) {
		if (input[i] == '-') {
			//괄호 속 값 계산
			temp += stoi(tempStr);
			tempStr = "";

			if (!minus) {
				//- 처음 등장한 경우 answer에 temp 더해줌 
				answer += temp;
				temp = 0;
			}
			else {
				//answer에 temp 빼줌
				answer -= temp;
				temp = 0;
			}

			//- 등장 표시
			minus = true;
			continue;
		}
		if (input[i] == '+') {
			//괄호 속 값 계산
			temp += stoi(tempStr);
			tempStr = "";
			continue;
		}

		//+나 -가 아닌 경우: 숫자 0~9
		tempStr += input[i];
	}
	//마지막 괄호 계산
	if (tempStr != "") {
		temp += stoi(tempStr);
		tempStr = "";

		if (!minus) {
			//- 처음 등장한 경우 answer에 temp 더해줌 
			answer += temp;
		}
		else {
			//answer에 temp 빼줌
			answer -= temp;
		}
	}

	cout << answer;
	return 0;
}
  • 가독성을 높인 코드
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);

	string input;
	cin >> input;
	
	//string 수식 int vector로 변환하기
	//+: -1, -: -2로 표시
	vector<int> inputVec;

	string tempStr = ""; 
	int len = input.length();
	for (int i = 0; i < len; ++i) {
		if (input[i] == '-') {
			inputVec.push_back(stoi(tempStr));
			tempStr = "";

			inputVec.push_back(-2);
			continue;
		}
		if (input[i] == '+') {
			inputVec.push_back(stoi(tempStr));
			tempStr = "";

			inputVec.push_back(-1);
			continue;
		}

		//+나 -가 아닌 경우: 숫자 0~9
		tempStr += input[i];
	}
	if (tempStr != "") {
		inputVec.push_back(stoi(tempStr));
	}

	//(+ 무조건 괄호)-(+ 무조건 괄호)-(+ 무조건 괄호)
	//- 나오기 전까지 + 무조건 괄호 (다른 선택지 없음)
	//- 나오면 다음 -까지 + 무조건 괄호 (빼지는 수 최대 되도록)
	
	bool minus = false; //- 나왔는지 여부 
	int answer = 0;

	int temp = 0; //괄호 속 값 계산
	for (int i = 0; i < inputVec.size(); ++i) {
		if (inputVec[i] == -1) { 
			continue;
		}
		if (inputVec[i] == -2) { 
			//괄호 앞 - 없는 경우 answer에 temp 더해줌
			if (!minus) {
				answer += temp;
				temp = 0;
				minus = true;
			}
			//괄호 앞 -있는 경우 answer에 temp 빼줌
			else {
				answer -= temp;
				temp = 0;
			}
			continue;
		}
		//+ 무조건 괄호
		temp += inputVec[i];
	}
	if (temp != 0) {
		//괄호 앞 - 없는 경우 answer에 temp 더해줌
		if (!minus) {
			answer += temp;
		}
		//괄호 앞 -있는 경우 answer에 temp 빼줌
		else {
			answer -= temp;
		}
	}

	cout << answer;
	return 0;
}

profile
Be able to be vulnerable, in search of truth
post-custom-banner

0개의 댓글