본문 바로가기
알고리즘

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

by SiO2whocode 2021. 5. 7.
반응형

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

 

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

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

programmers.co.kr

정말 다 맞게 한 것 같은데 테스트 3개가 틀려서 뭔가 했더니

answer값 갱신하는 if문 위치가 잘못됐었다..

while문 바로 안에 들어가 있어야하는데 while문 안의 for문안에 들어가 있었다^^..

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

using namespace std;

long long cal(long long a, long long b, char op){
    if(op == '*'){
        return a*b;
    }else if(op == '+'){
        return a+b;
    }else{
        return a-b;
    }
}

long long solution(string expression) {
    long long answer = 0;
    vector<long long> nums;
    vector<char> op;
    long long num = 0;
    for(int i = 0 ; i < expression.length() ; i++){
        char c = expression[i];
        if(c >= '0'&& c <= '9'){
            num = num*10 + c-'0';
        }else{
            op.push_back(c);
            nums.push_back(num);
            num = 0;
        }
    }
    nums.push_back(num);
    
    vector<char> opp = {'*','+','-'};
    do{
        vector<char> tmp_op = op;
        vector<long long> tmp_nums = nums;
        for(int i = 0 ; i < 3 ; i++){
            for(int j = 0 ; j < tmp_op.size() ; j++){
                if(tmp_op[j] == opp[i]){
                    tmp_nums[j] = cal(tmp_nums[j],tmp_nums[j+1],tmp_op[j]);
                    tmp_nums.erase(tmp_nums.begin()+j+1);
                    tmp_op.erase(tmp_op.begin()+j);
                    j--;
                }
            }
        }
        if(answer < abs(tmp_nums[0])){
            answer = abs(tmp_nums[0]);
        }
    }while(next_permutation(opp.begin(), opp.end()));
    
    return answer;
}



반응형

댓글0