おじさんの競プロ記録

自分の力で解答できた問題を振り返り、理解を深めたいです。

AtCoder Regular Contest 016 B - 音楽ゲーム

問題

問題文へ

N行の譜面が与えられます。譜面は9個の文字列です。xならばボタンを押す。oならばボタンを押し続けます。

何回ボタンを押したでしょうか?

制約

  • {1 \leqq N \leqq 100}

考えたこと

1行ずつ確認します。xであれば数えます。oの場合、前の行がo以外ならば数えます。1行目のoは前の行がないため、処理をわけます。

コード

#define _GIBCXX_DEBUG
#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (n); ++i)
#define all(v) v.begin(), v.end()
using namespace std;
using ll = long long;


int main(void) {
  int N;
  cin >> N;
  vector<string> v(N);
  rep(i, N) cin >> v[i];

  int ans = 0;
  rep(i, N) {
    rep(j, v[i].size()) {
      if (v[i][j] == 'x') ++ans;
      else if (v[i][j] == 'o') {
        if (i == 0) ++ans;
        else if (v[i - 1][j] != 'o') ++ans;
      }
    }
  }

  cout << ans << endl;
  
  return 0;
}

解説を読んで

とくにありません。