けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 043 B - バイナリハックイージー (6Q, 茶色, 200 点)

制約が小さいのでなんとでもなる。C++ なら文字列の末尾を削除する関数 pop_back() を知っていると楽だと思われる。

問題概要

エディター上で、'0'、'1'、'B' という 3 種のタイピング入力を行う。

  • '0' と打つと、エディターに表示された文字列の末尾に '0' が挿入される
  • '1' と打つと、エディターに表示された文字列の末尾に '1' が挿入される
  • 'B' と打つと、エディターに表示された文字列の末尾の文字が削除される (空文字列であるときは何もしない)

タイピング時の一連の入力に関する情報が文字列  S として与えられる。最終的なエディター上の文字列を求めよ。

制約

  •  1 \le |S| \le 10

考えたこと

C++ では、答えを表す文字列変数を res とすると、次のように実装できる。

  • 操作 '0':res += '0'
  • 操作 '1':res += '1'
  • 操作 'B' (空文字列でない場合):res.pop_back()

これらを順に処理していけばよい。なお、res が空文字列であるかどうかは、たとえば res.size() > 0 (長さが正であること) によって判定できる。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    string S;
    cin >> S;

    string res = "";
    for (auto c : S) {
        if (c == '0' || c == '1') res += c;
        else if (res.size() > 0) res.pop_back();
    }
    cout << res << endl;
}