https://programmers.co.kr/learn/courses/30/lessons/67257
코딩테스트 연습 - 수식 최대화
IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과
programmers.co.kr
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <iostream>
using namespace std;
long long calculate(char op, long long n1, long long n2) {
long long num = n1;
switch (op) {
case '+':
num += n2;
break;
case '-':
num -= n2;
break;
case'*':
num *= n2;
break;
default:
break;
}
return num;
}
long long solution(string expression) {
long long answer = 0;
vector<long long> num; //숫자
vector<char> operation, opers; //수식
string tmp = "";
for (int i = 0; i < expression.size(); i++) {
if (isdigit(expression[i]) != 0) {
tmp += expression[i];
}
else {
num.push_back(stoi(tmp));
tmp = "";
if (find(opers.begin(), opers.end(), expression[i]) == opers.end()) {
opers.push_back(expression[i]);
}
operation.push_back(expression[i]);
}
}
num.push_back(stoi(tmp));
sort(opers.begin(), opers.end());
do {
vector<long long> c_express = num; //수치
vector<char> c_operation = operation; //수식
for (int i = 0; i < opers.size();i++) {
for (int j = 0; j < c_operation.size();j++) {
if (opers[i] == c_operation[j]) {
c_express[j] = calculate(opers[i], c_express[j], c_express[j + 1]);
c_express.erase(c_express.begin() + j+1);
c_operation.erase(c_operation.begin() + j);
j--;
}
}
}
if (abs(c_express[0]) > answer) {
answer = abs(c_express[0]);
}
} while (next_permutation(opers.begin(), opers.end()));
return answer;
}
자료형을 잘보자
'전공공부 > 코딩테스트' 카테고리의 다른 글
(c++) 프로그래머스 "튜플" (0) | 2022.03.15 |
---|---|
(c++) 프로그래머스 "3진법 뒤집기" (0) | 2022.03.15 |
(c++) 프로그래머스 "약수의 개수와 덧셈" (0) | 2022.03.14 |
(c++) 프로그래머스 "거리두기 확인" (0) | 2022.03.14 |
(c++) 프로그래머스 [1차] 뉴스 클러스터링 (0) | 2022.03.08 |