競技プログラミング日記

主に AtCoder の記事です

AtCoder Beginner Contest 307D

ABC307D

実装:
愚直に実装する. 再帰で実装するより,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;
}