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

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

AtCoder ABC 380 B - Hurdle Parsing (6Q, 灰色, 200 点)

初歩的な構文解析問題

問題概要

"|---|-|----|-|-----|" のような、文字 '-' を文字 '|' で separate された文字列  S が与えられる。

各 '-' 区間の '-' の個数を順に出力せよ。

制約

  •  3 \le |S| \le 100

考えたこと

ここでは for 文で解いてみよう。次の変数を管理する。


  • num:今の時点で '-' が連続で何個続いているか

文字列を順に見ていき、次のように処理すれば良い。

  • 文字 '|' が来たとき
    • num の値を出力する
    • num の値を 0 にする
  • 文字 '-' が来たとき
    • num の値を 1 増やす

文字列の先頭の '|' については無視しよう。

コード

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

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

    int num = 0;
    for (int i = 1; i < S.size(); i++) {
        if (S[i] == '|') {
            cout << num << " ";
            num = 0;
        } else {
            num++;
        }
    }
    cout << endl;
}