第61回【JavaScript】内定

現在取り組んでいるのは、paiza ラーニング問題集「配列活用メニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

JavaScript をゼロから勉強してみよう、のコーナー 61 回目です。

AWS に立ち上げた Windows Server で動いているサービスの証明書の更新は誰がするのか。恥ずかしながら、LeoSaki(旦那)は Windows Server に関してはまったくの無知です。Linux の証明書はよく更新してますが、AWS なら ACM でいいだろう、というのが LeoSaki(旦那)の主張。しかし、あまり理解が及んでいない営業さんから、Windows Server かもしれないけど、AWS だからやっといて、と軽くパスが出ました。

それでは、今日も頑張ってみようと思います。

内定 (paizaランク C 相当)

人事のあなたは、N 人の中から採用者を決定します。N 人のテストの点数はそれぞれ A_i (1 ≦ i ≦ N)です。テストの点数が K 点以上の人全員を採用したいのですが、得点の高い方から M 人に辞退されてしまいました。あなたの採用することのできる最大の人数を答えてください。採用できる人数が 0 人の場合もあることに気をつけてください。


入力される値

N K M
A_1
...
A_N

・1 行目では、テストを受けた人数 N と、テストのボーダーの点数 K , 辞退された人数 M が半角スペース区切りで与えられます。
・続く N 行では、N 人のテストの点数 A_i (1 ≦ i ≦ N)が改行区切りで与えられます。

入力値最終行の末尾に改行が1つ入ります。


期待する出力

あなたの採用することのできる最大の人数を 1 行で出力してください。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・1 ≦ N , M ≦ 100
・0 ≦ A_i , K ≦ 10000 (1 ≦ i ≦ N)


入力例

5 3974 0
2049
4690
6867
3414
460

出力例

2

いきなりレベルが上がってきているような。まだ、これくらいなら簡単でしょうか。それにしても、辞退されるって悲しいですよねぇ。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const [n,k,m] = lines[0].split(/\s/).map(Number);
  const A = [];
  for (let i = 1; i <= n; i++) {
      A.push(Number(lines[i]));
  }
  let ans = A.filter(a => a >= k).length;
  ans -= m;
  if (ans < 0) {
      console.log(0);
  } else {
      console.log(ans);
  }
});
Python
N,K,M = map(int,input().split())
ans = 0
for _ in range(N):
    A = int(input())
    if A >= K:
        ans += 1
ans -= M
if ans < 0:
    ans = 0
print(ans)

最後に

ぱっと filter を思いつくことが出来たので、少しは力がついてきていると信じたい。でも、もっと簡潔に素敵に書くことが出来るんだろうなぁ。

しかし、簡潔さばかり追い求めていると、結果、何をしているか読み解くのに時間がかかってしまうこともあるんじゃないだろうか。いや、そんなぱっと見て理解出来るようなプロばかりではないと思うんですよ。というのは言い訳でしょうか。

引き続き、よろしくお願いいたします!

Python の第61回はこちら