実装:
愚直に実装する. 再帰で実装するより,for, while の方が楽.
本番では沼らない様に,多少無駄でも素直な実装が安全. この問題なら, \begin{align} &for(c \in s) \\ &\ \ \ c \text{で場合分け} \end{align} とすれば,迷わなくて済む.
使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"
int main() {
ll n; cin >> n;
string s; cin >> s;
vll a;
string t;
rep(i,n){
// 多少無駄でも素直な実装: s[i] で場合分け
if(s[i] == '('){
a.push_back(t.length());
t.push_back(s[i]);
}else if(s[i] == ')'){
if(a.size()) {
ll j = t.length()-1;
while(j >= 0 && t[j] != '('){
t.pop_back();
j--;
}
t.pop_back();
a.pop_back();
}else{
t.push_back(s[i]);
}
}else{
t.push_back(s[i]);
}
}
cout << t << endl;
return 0;
}