본문 바로가기
Coding Test/Programmers

[Programmers] (2020 카카오 인턴십) Lv 2. 수식 최대화

by song.ift 2023. 10. 10.

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

 

프로그래머스

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

programmers.co.kr

 

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

using namespace std;

void strtok(vector<long long>& v_num, vector<char>& v_op, const char* s) 
{
    string temp = "";

    while (*s != '\0') 
    {
        if (*s == '*' || *s == '+' || *s == '-') 
        {
            v_op.emplace_back(*s);
            v_num.emplace_back(stoll(temp));
            temp = "";
        }
        else temp += *s;
        ++s;
    }

    v_num.emplace_back(stoll(temp));
}

long long calc(char op, long long num1, long long num2) 
{
    switch (op) 
    {
    case '*':
        return num1 * num2;

    case '+':
        return num1 + num2;

    case '-':
        return num1 - num2;
    }
}

long long solution(string expression) 
{
    long long answer = 0;
    vector<long long> s_num;
    vector<char> s_op;
    strtok(s_num, s_op, expression.c_str());

    string op = "+-*";
    sort(op.begin(), op.end()); 

    do 
    {
        vector<long long> temp_num = s_num;
        vector<char> temp_op = s_op;

        for (size_t i = 0; i < op.size(); i++) 
        {
            char C = op[i];

            for (size_t j = 0; j < temp_op.size(); j++) 
            {
                if (temp_op[j] == C)
                {
                    long long sum = calc(C, temp_num[j], temp_num[j + 1]);
                    temp_num[j] = sum;

                    // J번 Index는 결과값으로 바꿔버리고, J + 1번 Index는 삭제를 시켜버리는 것
                    temp_num.erase(temp_num.begin() + j + 1);
                    temp_op.erase(temp_op.begin() + j);
                    j--; // 모든 데이터의 Index값이 하나씩 땡겨지기 때문에 포인터를 한 칸 감소시켜 줘야 한다는 과정
                }
            }
        }
        answer = max(answer, abs(temp_num[0]));
    } while (next_permutation(op.begin(), op.end()));

    return answer;
}

GitHub : https://github.com/developeSHG/Algorithm-Baekjoon_Programmers/commit/c79b711367f7b257a857e048994bdfcfe06c931d#diff-b7aba199b16b39c2f363f760c0b2ca31d175dadae585b0084b0b994a4f9d7b25

 

[level 2] Title: [카카오 인턴] 수식 최대화, Time: 0.02 ms, Memory: 4.02 MB -Bae… · developeSHG/Algorithm-Baekjoon_P

…kjoonHub

github.com

 

댓글