Official

B - Count Takahashi Editorial by MMNMM


初心者の方へ

  • AtCoder をはじめたばかりで何をしたらよいか分からない方は、まずは practice contest の問題A「Welcome to AtCoder」を解いてみてください。基本的な入出力の方法が載っています。
  • また、プログラミングコンテストの問題に慣れていない方は、AtCoder Beginners Selection の問題をいくつか解いてみることをおすすめします。
  • C++入門 AtCoder Programming Guide for beginners (APG4b) は、競技プログラミングのための C++ 入門用コンテンツです。

1. 素朴な解法

この問題は、次のような手順をプログラムすることで解くことができます。

  • 答えとなる整数の変数 \(\operatorname{ans}\) を作り、値を \(0\) とする。
  • 標準入力から \(N\) を入力する。
  • 次の操作を \(N\) 回繰り返す。
    • 標準入力から文字列を受け取る。
    • 受け取った文字列が Takahashi と等しければ、\(\operatorname{ans}\) の値を \(1\) 増やす。
  • \(\operatorname{ans}\) の値を出力する。

for 文による繰り返しや if 文による条件分岐を適切に用いると、この手順を正しくプログラムすることができます。

実装例は以下のようになります。

C++ での実装例

#include <iostream>

using namespace std;

int main() {
    // Takahashi と等しい個数のカウンタ
    int ans = 0;

    int N;
    cin >> N;

    for (int i = 0; i < N; i++) {
        string S;
        cin >> S;
        // S が Takahashi と等しかったら、カウンタの値を増やす
        if (S == "Takahashi") {
            ans++;
        }
    }

    // カウンタの値を出力
    cout << ans << endl;

    return 0;
}

Python での実装例

# Takahashi と等しい個数のカウンタ
ans = 0

N = int(input())

for _ in range(N):
    S = input()
    # S が Takahashi と等しかったら、カウンタの値を増やす
    if S == 'Takahashi':
        ans += 1

# カウンタの値を出力
print(ans)

2. 少し工夫した解法

この問題の答えは、「入力の中に含まれる T の個数」や「入力の中に含まれる s の個数」のように言い換えることができます。

入力全体をまとめて扱ったり、文字列の中に特定の文字が含まれる個数を求めたりすることが簡単な言語では、この方針を選ぶことで実装が楽になる場合があります。

Haskell での実装例

main = interact $ show . length . filter ('T' ==)

Python での実装例

print(open(0).read().count('T'))

Bash での実装例

grep T | wc -l

posted:
last update: