見出し画像

AtCoder Beginner Contest 175を見直す

全体の感想

今回初めて、CPPでABCに挑んでみましたが、A問題以外解けませんでした。解説をちょっとみてみたところ、B,Cも考え方は間違っていなかったようなので、言語の仕様を理解していないことでうまくいかなかったのか、何故解答することが出来なかったのか見直していきたいと思います。


A - Rainy Season

'S'と'R'で構成された3文字の文字列が入力されるので、'R'が連続で出現している数を返す問題。

例:
入力①:SRR
出力①:2
入力②:SRS
出力②:1

作成した解答

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
using namespace std;

int main() {
   string s;
   cin >> s;
   int ans = 0;
   rep(i, 3) if (s[i] == 'R') ans++;
   if(ans == 2 && s[1] == 'S') cout << 1 << endl;
   else cout << ans << endl;
}

'R'を数えて解答しました、数えて解答する場合上記例の入力②については出力が2ではなく1になるので条件分岐しました。

ちなみに解説動画をみてみたところ、組み合わせが高々8通りなので「if」や「switch」で解答するとよいとのことでした。

ただ、それを書くだけでは芸がないので、文字列の長さが3以上だった場合にも対応できるように書き直してみました。

一夜明けて作成した解答

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
using namespace std;

int main() {
   string s;
   cin >> s;
   int count = 0, ans = 0;
   rep(i, s.length()) {
       if(s[i] == 'R') count++;
       else count = 0;
       ans = max(ans, count);
   }
   cout << ans << endl;
}

感覚的には、入力が3文字に限定されていなければB問題ぐらいの難易度だと思われます。

この記事が気に入ったらサポートをしてみませんか?