본문 바로가기
알고리즘/프로그래머스

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

by 오오오니 2023. 4. 16.

어려웠던 부분

-문자를 숫자로 바꾸는 부분

- 연산자와 숫자의 인덱스를 어떻게 할지

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

using namespace std;

long long solution(string expression) {
    long long answer = 0;
    vector<long long> num;
    vector<char> exp, location;
    string n = "";
    
    for(int i = 0; i < expression.size(); i++)
    {
    	//연산자일때
        if(expression[i] == '+' || expression[i] == '-' || expression[i] == '*')
        {
            num.push_back(stoi(n));
            n = "";
            //연산자 종류저장
            if(find(exp.begin(), exp.end(), expression[i]) == exp.end())
                exp.push_back(expression[i]);
            //연산자 저장
            location.push_back(expression[i]);
        }
        else
            n += expression[i];
    }
    //마지막 숫자 저장
    num.push_back(stoi(n));
    //next_permutation쓸려고 정렬
    sort(exp.begin(), exp.end());
    
    do
    {
        vector<long long> tmp_num = num;
        vector<char> tmp_loc = location;
        
        for(int i = 0; i < exp.size(); i++)
        {
            for(int j = 0; j < tmp_loc.size(); j++)
            {
            	//i 번째 우선순위의 연산자이면
                if(exp[i] == tmp_loc[j])
                {
                	//계산
                    if(tmp_loc[j] == '+')
                        tmp_num[j] = tmp_num[j] + tmp_num[j + 1];
                    else if(tmp_loc[j] == '-')
                        tmp_num[j] = tmp_num[j] - tmp_num[j + 1];
                    else if(tmp_loc[j] == '*')
                        tmp_num[j] = tmp_num[j] * tmp_num[j + 1];
                    //계산한 후 삭제
                    tmp_num.erase(tmp_num.begin() + j + 1);
                    tmp_loc.erase(tmp_loc.begin() + j);
                    j--;
                }
            }    
        }
        //최댓값 갱신
        if(answer < abs(tmp_num[0]))
            answer = abs(tmp_num[0]);
    } while(next_permutation(exp.begin(), exp.end()));
    
    return answer;
}

 

풀이 :

https://eunchanee.tistory.com/88

 

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

완전 탐색으로 풀어야 한다. 문자열 형태의 숫자를 int형으로 바꿔서 저장하기 위한 vector num. 문자열 형태의 숫자를 저장하는 string n. 연산자의 위치를 나타내는 vector location. 연산자의 종류를 나

eunchanee.tistory.com