코딩테스트
[백준] 잃어버린 괄호 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;
}