본 블로그는 비상업적, 비영리적 용도의 학업만을 위해 글을 게시합니다.
#include <string>
#include <vector>
#include <utility>
using namespace std;
string getU(string s)
{
string u(s, 0, 1);
int open = (u == "("), close = !open;
for(int i = 1; i < s.length(); i++)
{
u += s[i];
open += s[i] == '(';
close += s[i] == ')';
if(open == close)
return u;
}
}
bool isPerfect(string s)
{
int check = 0;
for(int i = 0; i < s.length(); i++)
{
check += s[i] == '(';
check -= s[i] == ')';
if(check < 0)
return false;
}
return true;
}
string reverseBracket(string s)
{
for(int i = 0; i < s.length(); i++)
s[i] = (s[i] == ')') ? '(' : ')';
return s;
}
string getUV(string s)
{
if(s == "")
return s;
string u = getU(s);
string v(s, u.length(), s.length() - u.length());
if(isPerfect(u))
{
v = getUV(v);
return u + v;
}
else
return "(" + getUV(v) + ")" + reverseBracket(u.substr(1, u.length() - 2));
}
string solution(string p) {
string answer = getUV(p);
return answer;
}
#include <bits/stdc++.h>
using namespace std;
bool check(const string &a) {
int r = 0;
for (char ch : a) {
if (ch == '(') ++r;
else --r;
if (r < 0) return false;
}
return r == 0;
}
string solution(string p) {
if (p == "") return "";
if (check(p)) return p;
int i, t = 0;
for (i = 0; i < p.size(); ++i) {
if (p[i] == '(') ++t;
else --t;
if (t == 0) break;
}
string u = p.substr(0, i + 1);
string v = p.substr(i + 1);
if (check(u)) return u + solution(v);
for (char &ch : u) ch = ch == '(' ? ')' : '(';
return string("(") + solution(v) + ")" + u.substr(1, u.size() - 2);
}