티스토리 뷰

백준

백준 소스코드 [C++] 16637 괄호 추가하기

Hani_Levenshtein 2021. 6. 4. 21:46

https://www.acmicpc.net/problem/16637

 

16637번: 괄호 추가하기

길이가 N인 수식이 있다. 수식은 0보다 크거나 같고, 9보다 작거나 같은 정수와 연산자(+, -, ×)로 이루어져 있다. 연산자 우선순위는 모두 동일하기 때문에, 수식을 계산할 때는 왼쪽에서부터 순

www.acmicpc.net

백준 소스코드 [C++] 16637 괄호 추가하기

#include <iostream>
#include <algorithm>
#include <queue>
#include <string>
#include <limits.h>
#include <vector>
#include <math.h>
#include <stack>
#include <bitset>
#include <string.h>
#include <set>
#include <map>
#include <unordered_map>
#include <sstream>
#include <cstdlib>
#include <cassert>
#define all(v) v.begin(), v.end()
#define pii pair<int, int>
#define pli pair<ll, int>
#define make_unique(v) sort(all(v)), v.erase(unique(all(v)), v.end())
typedef long long ll;
using namespace std;

int n, res=INT_MIN;
string s;
int cal(int L, int R, char op){
	if (op == '*') return (L * R);
	else if (op == '+') return (L + R);
	else return (L - R);
}

void makeSum(int idx, int accSum){
	if (n < idx){
		res = max(res, accSum);
		return;
	}
	if (idx + 2 <= n){
		int nextCal = cal(s[idx] - '0', s[idx + 2] - '0', s[idx + 1]);
		makeSum(idx + 4, cal(accSum, nextCal, s[idx - 1]));
	}
	makeSum(idx + 2, cal(accSum, s[idx] - '0', s[idx - 1]));
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
	cin >> n;
	cin >> s;
	s = "+" + s;
    makeSum(1, 0);
    cout << res;
    return 0;
}
댓글