3가지 연산문자만으로 이루어진 연산 수식 입력됨
연산자의 우선순위를 재정의 가능
그렇게 했을 때 가장 큰 숫자 return하는 solution 함수 만들기
피연산자는 0이상 999이하의 숫자
long long calc 함수는 인자로 받은 숫자들과 연산자로 계산해주는 함수
우선순위를 priors배열에 저장해둔다.
expression 문자열을 연산자와 숫자를 분리하여 각자 op, num이라는 vector에 저장
op와 num을 그대로 op_cp와 num_cp에 넣어준 뒤
연산자 우선순위대로 반복문을 돌면서 계산을 해준다.
기존 값보다 큰 값이 나오면 바로바로 answer에 저장해준다.
#include <string>
#include <vector>
#include <algorithm>
#include <cstdlib>
using namespace std;
long long calc(long long n1, long long n2, char op) {
if (op == '+') return n1 + n2;
else if (op == '-') return n1 - n2;
else return n1 * n2;
}
long long solution(string expression) {
long long answer = 0;
char operands[3] = { '+','-','*' };
int priors[6][3] = {
0,1,2,
0,2,1,
1,0,2,
1,2,0,
2,0,1,
2,1,0
};
int len = expression.length();
vector<long long> num;
vector<char> op;
int i = 0;
while (1) {
if (expression[i] == '+' || expression[i] == '-' || expression[i] == '*') {
op.push_back(expression[i]);
num.push_back(stoi(expression.substr(0, i)));
expression.replace(0, i + 1, "");
i = 0;
}
i++;
if (i == expression.length()) {
num.push_back(stoi(expression.substr(0, i)));
break;
}
}
for (int y = 0; y < 6; y++) {
vector<long long> num_cp = num;
vector<char> op_cp = op;
for (int x = 0; x < 3; x++) {
for (int k = 0; k < op_cp.size(); k++) {
if (op_cp[k] == operands[priors[y][x]]) {
int cal = calc(num_cp[k], num_cp[k + 1], op_cp[k]);
num_cp[k] = cal;
num_cp.erase(num_cp.begin() + k + 1);
op_cp.erase(op_cp.begin() + k--);
}
}
}
long long ret = num_cp[0];
answer = max(answer, abs(ret));
}
return answer;
}