본문 바로가기

코딩테스트/프로그래머스

[프로그래머스] 수식 최대화

728x90
반응형


🔗 문제 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


반응형
728x90

👩‍💻 코드

#include <string>
#include <vector>
#include <stack>
#include <iostream>

using namespace std;

long long CalculateOperator(long long left, char op, long long right){
    switch(op){
        case '+':
            return left + right;
        case '-':
            return left - right;
        case '*':
            return left * right;
    }
    
    return 0;
}

long long CalculateExpression(vector<long long> numbers, vector<char> operators, const string &currentOperators){
    for(char currentOperator : currentOperators){
        for(int i = 0; i < operators.size();){
            if(operators[i] == currentOperator){
                long long result = CalculateOperator(numbers[i], currentOperator, numbers[i + 1]);
                numbers[i] = result;
                numbers.erase(numbers.begin() + i + 1);
                operators.erase(operators.begin() + i);
            } else {
                i++;
            }
        }
    }
    
    return abs(numbers[0]);
}

long long solution(string expression) {
    vector<long long> numbers;
    vector<char> operators;
    string number = "";
    
    for(int i=0; i<expression.size(); i++){
        if(isdigit(expression[i])){
            number += expression[i];
        }else{
            numbers.push_back(stoi(number));
            operators.push_back(expression[i]);
            
            number = "";
        }
    }
    
    if(number != ""){
        numbers.push_back(stoi(number));
    }
    
    vector<string> priority = {"*+-", "*-+", "+*-", "+-*", "-*+", "-+*"};
    long long answer = 0;
    
    for(int i=0; i<priority.size(); i++){
        long long result = CalculateExpression(numbers, operators, priority[i]);
        answer = max(result, answer);
    }
    
    return answer;
}

📝 풀이

CalculateOperator 함수는 연산 문자에 따라 표현식을 계산합니다.

CalculateExpression 함수는 숫자와 연산자 정보가 담긴 vector와 연산자 우선순위를 받아 연산 수식을 계산합니다.

 

연산 수식을 숫자와 연산자로 나누어 각각 vector에 저장합니다.

CalculateExpression 함수를 통해 6가지 연산자 우산순위의 모든 경우의 수를 계산하여 결과값을 도출합니다.

각 도출된 결과값 중 가장 큰 값을 answer에 담아 return 합니다.

 

 

728x90
반응형