B - Roller Coaster Editorial by TumoiYorozu


この解説は、C++ に入門したばかりの中高生レベルを想定して、考察の方法、コードの書き方の解説をします。

この問題を解く考察としては、\(N\)個の \(h_1, h_2, ..., h_N\) それぞれに対し、K以上かどうかを判定し、K以上であったものの個数を答えれば良い。

ヒント1:N個のhを受け取る

for (int i = 0; i < N; i++) で N 回のループが書ける。 ループの中で h を入力する処理を書けば、N個の$h_1, h_2, ..., h_N$を受け取ることが出来る。

ヒント2:N個のhを受け取る(具体的に編)
以下のように書くと良い。

#include <bits/stdc++.h>
using namespace std;
int main() {
    int N, K;
    cin >> N >> K;

    ~~処理~~
    for (int i = 0; i < N; i++) {
        int h;
        cin >> h;
        ~~処理~~
    }
    ~~処理~~
}

次は、それぞれのhがK以上かを判定して、答えを記録すると良い。

ヒント3:個数を答える
answer という変数を用意して、それに K 以上であったものの個数を記録するとよいだろう。

#include <bits/stdc++.h>
using namespace std;
int main() {
    int N, K;
    cin >> N >> K;

    int answer = 0;
    for (int i = 0; i < N; i++) {
        int h;
        cin >> h;
        ~~処理~~
    }
    ~~処理~~
}

次は、それぞれのhがK以上かを判定して、答えを記録すると良い。

ヒント4:K以上かどうかを判定
ループの中で、それぞれの h を if 文でチェックをすると良いだろう。

#include <bits/stdc++.h>
using namespace std;
int main() {
    int N, K;
    cin >> N >> K;

    int answer = 0;
    for (int i = 0; i < N; i++) {
        int h;
        cin >> h;
        if (~~条件~~) {
            ~~処理~~
        }
    }
    ~~処理~~
}

ヒント5:K以上のもののカウント
例えば単に
answer + 1
と書いても、answer+1 を計算するだけで answer の中身は変わらない。正しくは
answer = answer + 1
と代入をしないといけない。他にも
answer += 1
answer++
と省略して書く書き方もある。

カウントが出来れば、あとはそれを出力するだけだ!

hがK以上h が Kよりも大きい の違いにも気をつけよう。

解答コード

コード例 (実際の提出のリンクはこちら)

#include <bits/stdc++.h>
using namespace std;
int main() {
    int N, K;
    cin >> N >> K;

    int answer = 0;
    for (int i = 0; i < N; i++) {
        int h;
        cin >> h;
        if (h >= K) {
            answer++;
        }
    }
    cout << answer << endl;
}

posted:
last update: