第61回【Python】内定

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

はじめに

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

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

少し問題が複雑化して、実務でもありそうなものが問われています。実際はもう少し処理が加わるのでしょうけれど。今までいろんな作業を行ってきた「結果」が活かされていて、スラスラとコードを書くことができています。実務に勝るもの無しです。

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

内定

人事のあなたは、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 ≦ N , M ≦ 100
・0 ≦ A_i , K ≦ 10000 (1 ≦ i ≦ N)


5 3974 0
2049
4690
6867
3414
460

合格者一覧を出せ、というわけでなく、合格者数を出せ、というわけなので、そんなに難しくはない。

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)
VBA
NKM = Split(Cells(1, 1), " ")
N = Val(NKM(0))
K = Val(NKM(1))
M = Val(NKM(2))
ans = 0
For i = 0 To N - 1
    A = Cells(i + 2, 1)
    If A >= K Then ans = ans + 1
Next
ans = ans - M
If ans < 0 Then ans = 0
Debug.Print ans

最後に

もし、合格者一覧を出せ、であったり、上位〇番目まで但し辞退者がいる場合は繰り上げ、であったり、条件が複雑化してきても、基本的にコードの流れは同じなのだと思う。それぞれでちょっとしたコツは必要そうだけれど。

まだ、VBA でも同じようにコードが書くことができている。なんか凄い。もっと早い段階で VBA では限界だ、ってなる気がしていたんだ。正直なところ。

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

Python学習,Python,paiza

Posted by LeoSaki