第98回【Python】forループ

現在取り組んでいるのは、paiza ラーニング問題集「C ランクレベルアップメニュー」になります。

はじめに

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

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

指輪も苦手で、婚約指輪も結婚指輪もつけていません。まぁ、買ってもないんですが。長いこと一緒にいて、そのままの流れで籍を入れたので、特別なことはしてないんですよね。そのうち何かしようと言いながら時だけが過ぎてしまっています。

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

forループ

パイザ君の所属する会社では忘年会の余興で次のようなゲームを行います。まず、正整数 M が発表され、参加者は手元の紙に M 個、好きな数字を書きます。このとき、紙に書く数のそれぞれは 1 以上 M 以下であり、同じ数字を何度書いても構いません。その後、 1 以上 M 以下の数 K が発表され、各参加者は自分の紙に数字 K を書いた数だけポイントをもらい、ポイントの高い順に景品が配られます。

忘年会の参加者の人数 N と、数 M , K が与えられ、各参加者が書いた紙が与えられるので、それぞれの参加者の得点を計算して出力してください。

N M K
a_{1,1} ... a_{1,M}
...
a_{N,1} ... a_{N,M}

1 行目には上で説明した数 N, M, K が半角スペース区切りで与えられ、 2 行目から (N + 1) 行目までには各参加者が紙に書いた数字が M 個ずつ半角スペース区切りで、 N 回与えられます。


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

・1 ≤ N , M ≤ 50
・1 ≤ K , a_{i,j} ≤ M(1 ≤ i ≤ N , 1 ≤ j ≤ M)


入力例

3 2 1
2 2
1 2
1 1

出力例

0
1
2

簡潔に書いてみる。模範解答を見ると、二重ループで解いていた。ので、VBA の方は、模範解答に沿って書いておく。

Python
N,M,K = map(int,input().split())
for _ in range(N):
    A = [int(x) for x in input().split()]
    print(A.count(K))
VBA
NMK = Split(Cells(1, 1), " ")
For i = 1 To NMK(0)
    cnt = 0
    A = Split(Cells(i + 1, 1), " ")
    For j = LBound(A) To UBound(A)
        If A(j) = NMK(2) Then
            cnt = cnt + 1
        End If
    Next
    Debug.Print cnt
Next

型の扱いに注意。Split 関数でとってきたら string 型なので、場合に応じて数値型に変えてあげる必要がある。特に比較する場合は、同じ型でないと比較にならない。

最後に

この章の boss 問題になっていたのですが、それほど難しくはなかったです。模範解答(二重ループで要素を一つずつ調べる方法)でやる場合は、型をしっかり理解しておかなければならない。VBA で option explicit をつけておけば、変数を宣言しないとエラーになるので、オススメ。

まぁ、すべてを variant 型で宣言しているのをたまに見かけて、うーんってなる、こともある。

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

Pythonpaiza,学習,Python

Posted by LeoSaki