第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 型で宣言しているのをたまに見かけて、うーんってなる、こともある。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません