괄호가 지워진 길이 50 이하의 덧셈과 뺄셈만 존재하는 식의 최소값을 구하는 문제입니다.
숫자는 99999 이하이며, 0부터 시작 할 수 있습니다.
식은 숫자로 시작하고 숫자로 끝나며, 연산자가 두개 이상 연속으로 입력되지 않습니다.
최소가 나오는 방법은 간단합니다.
- 연산자를 기점으로 괄호를 쳐서 그 안의 연산을 우선적으로 해주면 됩니다.
구현 방법으로는 입력되는 식을 -로 split 해주고, 각 substring을 다시 +로 split한 뒤 연산을 해줍니다.
그리고 그 결과물을 다시 - 연산을 해주면 됩니다.
이 간단한 문제를 저는 처음 시작하는 substring에도
+ 연산이 포함될 수 있다는 것을 간과하여 3번이나 실패를 했습니다.
정답율도 50% 언저리였는데 참 슬펐습니다.
더보기
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>
using namespace std;
const int StringToInt(const string& str)
{
int ret = 0;
for (unsigned int i = 0; i < str.size(); ++i)
{
ret *= 10;
ret += str[i] - '0';
}
return ret;
}
const long long StringToList(const string& list)
{
long long ret = 0;
string temp;
vector<string> pParse;
stringstream ss(list);
while (getline(ss, temp, '+'))
{
pParse.push_back(temp);
}
for (const auto& iter : pParse)
{
ret += StringToInt(iter);
}
return ret;
}
int main()
{
long long ret = 0;
string input, temp;
vector<string> mParse;
vector<int> mParseNum;
cin >> input;
stringstream ss(input);
while (getline(ss, temp, '-'))
{
mParse.push_back(temp);
}
ret = StringToList(mParse[0]);
for (unsigned int i = 1; i < mParse.size(); ++i)
{
ret -= StringToList(mParse[i]);
}
cout << ret << endl;
return 0;
}
'개발일지 > Algorithm' 카테고리의 다른 글
20.06.27 개발일지 - Q-인덱스 (0) | 2020.06.27 |
---|---|
20.06.26 개발일지 - Henry (0) | 2020.06.26 |
20.06.25 개발일지 - 카잉 달력 (0) | 2020.06.25 |
20.06.25 개발일지 - 수 정렬하기 3 (0) | 2020.06.25 |
20.06.24 개발일지 - 수 정렬하기 3 (0) | 2020.06.24 |