알고리즘 문제풀이
[프로그래머스] 수식최대화
SiO2whocode
2021. 5. 7. 12:01
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;
}
728x90