본문 바로가기
전공공부/코딩테스트

(c++) 프로그래머스 "수식 최대화"

by 시아나 2022. 3. 15.

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

 

코딩테스트 연습 - 수식 최대화

IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과

programmers.co.kr


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

using namespace std;
long long calculate(char op, long long n1, long long n2) {
    long long num = n1;
    switch (op) {
    case '+':
        num += n2;
        break;
    case '-':
        num -= n2;
        break;
    case'*':
        num *= n2;
        break;
    default:
        break;
    }
    return num;
}

long long solution(string expression) {
    long long answer = 0;
    vector<long long> num; //숫자
    vector<char> operation, opers; //수식
    string tmp = "";

    for (int i = 0; i < expression.size(); i++) {
        if (isdigit(expression[i]) != 0) {
            tmp += expression[i];
        }
        else {
            num.push_back(stoi(tmp));
            tmp = "";
            if (find(opers.begin(), opers.end(), expression[i]) == opers.end()) {
                opers.push_back(expression[i]);
            }
            operation.push_back(expression[i]);
        }
    }
    num.push_back(stoi(tmp));
    sort(opers.begin(), opers.end());

    do {
        vector<long long> c_express = num; //수치
        vector<char> c_operation = operation; //수식

        for (int i = 0; i < opers.size();i++) {
            for (int j = 0; j < c_operation.size();j++) {
                if (opers[i] == c_operation[j]) {
                    c_express[j] = calculate(opers[i], c_express[j], c_express[j + 1]);
                    c_express.erase(c_express.begin() + j+1);
                    c_operation.erase(c_operation.begin() + j);
                    j--;
                }
            }
        }
        if (abs(c_express[0]) > answer) {
            answer = abs(c_express[0]);
        }
    } while (next_permutation(opers.begin(), opers.end()));
    return answer;
}

 

자료형을 잘보자