[프로그래머스 C++] 수식 최대화
[프로그래머스 C++] 수식 최대화
https://school.programmers.co.kr/learn/courses/30/lessons/67257
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
해결전략
순열 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++] 괄호 변환 (1) | 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
댓글을 사용할 수 없습니다.