코딩테스트

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

코딩너구리 2024. 11. 1. 11:36

 

잃어버린 괄호 

시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 128 MB 96302 53027 41319 54.442%

문제

세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.

그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.

괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 정답을 출력한다.


덧셈들을 우선 계산하고, 빼기를 실행한다.

 

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

//문자열을 분리하기 위한 함수
vector<string> Split(string n, char divi);

//문자열의 숫자들을 더해주는 함수
int GetSum(string n);

int main()
{
	string N;
	int result = 0;

	cin >> N;

	//-를 기준으로 먼저 자른다.
	vector<string> str = Split(N, '-');

	for (int i = 0; i < str.size(); i++)
	{
		//str에 있는 값이 여러개의 덧셈으로 있을 경우 하나의 수로 합친다.
		int temp = GetSum(str[i]);

		if (i == 0)
		{
			result += temp;
		}
		else
		{
			result -= temp;
		}
	}

	cout << result;
}

vector<string> Split(string n, char divi)
{
	vector<string> split;
	stringstream mystream(n);
	string splitData;

	while (getline(mystream, splitData, divi))
	{
		split.push_back(splitData);
	}

	return split;
}

int GetSum(string n)
{
	int result = 0;
	vector<string> temp = Split(n, '+');

	for (int i = 0; i < temp.size(); i++)
	{
		result += stoi(temp[i]);
	}

	return result;
}

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