[프로그래머스]수식 최대화(C++)

갭라·2021년 6월 29일
0

문제-수식 최대화

🤔문제 해석

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;
}
profile
준비생!

0개의 댓글