어려웠던 부분
-문자를 숫자로 바꾸는 부분
- 연산자와 숫자의 인덱스를 어떻게 할지
#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
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 2022 KAKAO TECH INTERNSHIP - 성격 유형 검사하기 (0) | 2023.09.21 |
---|---|
[프로그래머스] 이진 변환 반복하기 c++ (0) | 2023.05.14 |
[프로그래머스] 배달 c++ (0) | 2023.04.01 |
[프로그래머스] 행렬 테두리 회전하기 (0) | 2023.03.24 |
[프로그래머스] 멀쩡한 사각형 c++ (0) | 2023.03.02 |