[프로그래머스 C++] 수식 최대화
[프로그래머스 C++] 수식 최대화
https://school.programmers.co.kr/learn/courses/30/lessons/67257
해결전략
순열 Permutation, 조합 Combination
문자열
do
while(next_permutation(v.begin(), v.end()))
정답 코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<long long> v; // 숫자
vector<char> oper; // 연산자
long long answer; // 최종 결과값
// Calculate 함수는 두 개의 숫자와 한 개의 연산자를 입력으로 받아 연산 결과를 반환.
long long Calculate(long long a, long long b, char op)
{
if (op == '+') return a + b;
else if (op == '-') return a - b;
else if (op == '*') return a * b;
}
long long solution(string ex) {
int n = ex.size();
string num = "";
for(int i=0; i<n; i++)
{
if('0' <= ex[i] && ex[i] <= '9'){
num += ex[i];
}
else{
oper.push_back(ex[i]); // 연산자를 oper 벡터에 저장
v.push_back(stoll(num)); // 숫자를 v 벡터에 저장
num = "";
}
}
v.push_back(stoll(num)); // 마지막 숫자를 v 벡터에 추가
// 모든 연산자의 우선순위를 고려하기 위해 순열을 사용
vector<int> idx = { 0, 1, 2 };
string op = "+-*";
do{
// 원본 벡터 v와 oper의 복사본을 만듬
vector<long long> numValue = v;
vector<char> tempOper = oper;
// 각 연산자 우선순위에 따라 계산을 수행합니다.
for(int i = 0; i < 3; i++){ // "+-*"
for (int j = 0; j < tempOper.size();) {
if(tempOper[j] == op[idx[i]])
{
long long result = Calculate(numValue[j], numValue[j + 1], tempOper[j]); // 두 숫자를 선택하여 해당 연산자로 계산
// 계산에 사용된 두 숫자를 numValue 벡터에서 제거
numValue.erase(numValue.begin() + j);
numValue.erase(numValue.begin() + j);
numValue.insert(numValue.begin() + j, result); // 계산 결과를 numValue 벡터에 삽입
tempOper.erase(tempOper.begin() + j); // 사용된 연산자를 tempOper 벡터에서 제거
}
else
j++; // 해당 연산자가 아닐 경우 다음 인덱스로 이동
}
}
answer = max(answer, abs(numValue[0]));
}
while (next_permutation(idx.begin(), idx.end())); // 모든 연산자의 순열을 고려
return answer;
}
'⭐ 코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 C++] 줄 서는 방법 (0) | 2023.11.29 |
---|---|
[프로그래머스 C++] 마법의 엘리베이터 (0) | 2023.11.24 |
[프로그래머스 C++] 괄호 변환 (0) | 2023.11.22 |
[프로그래머스 C++] [3차] 방금그곡 (2) | 2023.11.21 |
[프로그래머스 C++] 메뉴 리뉴얼 (0) | 2023.11.20 |
댓글
이 글 공유하기
다른 글
-
[프로그래머스 C++] 줄 서는 방법
[프로그래머스 C++] 줄 서는 방법
2023.11.29 -
[프로그래머스 C++] 마법의 엘리베이터
[프로그래머스 C++] 마법의 엘리베이터
2023.11.24 -
[프로그래머스 C++] 괄호 변환
[프로그래머스 C++] 괄호 변환
2023.11.22 -
[프로그래머스 C++] [3차] 방금그곡
[프로그래머스 C++] [3차] 방금그곡
2023.11.21