알고리즘/프로그래머스
[프로그래머스] 수식 최대화 c++
오오오니
2023. 4. 16. 12:40
어려웠던 부분
-문자를 숫자로 바꾸는 부분
- 연산자와 숫자의 인덱스를 어떻게 할지
#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