수식 최대화

108번뇌·2021년 10월 22일

https://programmers.co.kr/learn/courses/30/lessons/67257

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>



using namespace std;
long long calculate(long long a, long long b, char ch)
{
	if (ch == '+') return a + b;
	else if (ch == '-') return a - b;
	else return a*b;
}

long long solution(string expression) {
	long long answer = 0;
	vector<char> vOpe = { '-','*','+' };
	sort(vOpe.begin(), vOpe.end());
	vector<long long> vNumber;
	vector<char> vCHARAC;

	string sTemp;
	for (int i = 0; i < expression.size(); i++)
	{
		if (expression[i] >= '0' && expression[i] <= '9')
		{
			sTemp += expression[i];
		}
		else
		{
			vCHARAC.push_back(expression[i]);
			vNumber.push_back(stoll(sTemp));
			sTemp = "";
		}

		if (i == expression.size() - 1)
		{
			vNumber.push_back(stoll(sTemp));
		}
	}

	do {
		vector<char> vCHAR = vCHARAC;
		vector<long long> vNum = vNumber;

		for (int i = 0; i < 3; i++)//덧쁠마
		{
			for (int j = 0; j < vCHAR.size(); j++)
			{
				if (vOpe[i] == vCHAR[j])
				{
					long long First = vNum[j];
					long long Second = vNum[j + 1];
					long long TempCal = calculate(First, Second, vCHAR[j]);//j와 j+1을 계산한다.
					vNum[j] = TempCal;//계산해서 덮어씌운다 j에
					vNum.erase(vNum.begin() + j + 1);//j+1 vNum은 없앤다. 
					vCHAR.erase(vCHAR.begin() + j);//계산한 문자없앤다.
					j--;//없앤거 반복문을 위해 --해줘야함
				}
			}
		}
		long long TempMax = abs(vNum[0]);
		answer = max(TempMax, answer);
	} while (next_permutation(vOpe.begin(), vOpe.end()));


	return answer;
}


int main()
{
	string sTemp = "100-200*300-500+20";

	long long vResult = solution(sTemp);






	return 0;
}
  1. erase 사용하기
  2. erase 사용하면서, j--루프
  3. 숫자 문자 숫자 -> 계산값 하면서
    뒷 숫자, 문자 erase 하는 법좋은 문제였음.
profile
내일 아침 눈을 떳을 때, '기대되는 오늘 하루를 만들기 위해' 나는 오늘도 생각하고 고민한다.

0개의 댓글