LoginSignup
0
0

More than 1 year has passed since last update.

【勉強記録】 forループ (paizaランク C 相当)

Last updated at Posted at 2021-10-11

目次

  • 問題文
  • 私の解答
  • 解答例
  • 学んだこと
  • 振り返り

問題文

詳細はコチラ

問題文の要約

数当てゲームを行う。
1行目のinputで、ゲームの参加者数、一人が書き出す数字の個数、ターゲットの値が与えられる。
2行目以降で各参加者が書き出した値が与えられ、それらとターゲットの値が合致した数をカウントしていく。

入力例2
4 5 2
1 3 4 4 5
2 2 2 2 2
1 2 3 4 5
1 1 1 1 1

出力例2
0
5
1
0

私の解答

main.py
[count, num, point] = input().split()

for i in range(int(count)):
    ans = input().split()
    a = 0
    for j in ans:
        if j == point:
            a += 1
    print(a)

概ね、今までの学習の成果通りという印象。
課題は変数名です。

解答例

main.py
N, M, K = map(int, input().split())

for i in range(N):
    a = [int(j) for j in input().split()]
    ans = 0
    for j in range(M):
        if a[j] == K:
            ans += 1
    print(ans)

後半部分には大きな違いがありません。
一番気になったのはmap関数です。コチラでは下記のような説明がされています。

Pythonのmap()を使うと、イテラブル(リストやタプルなど)のすべての要素に組み込み関数やlambda(ラムダ式、無名関数)、defで定義した関数などを適用できる。

splitでリスト化した値、N,M,Kをstr型ではなくint型で取り出したいためにmapを使っているようです。
ちなみに先ほどのサイトを確認してみると、

map()の処理はリスト内包表記やジェネレータ式で代用可能であり、多くの場合、リスト内包表記・ジェネレータ式を使用するほうが好ましいとされている。

との記載もあるので、書き換えてみます。

main.py
N, M, K = [int(s) for s in input().split()] # リスト内包表記
N, M, K = map(int, input().split()) # map関数

# 以下省略

この程度ならmap関数の方が見やすいように思います。
もう少し複雑な処理をする際にはリスト内包表記の方が優れるのかもしれません。

学んだこと

  1. map関数
  2. リスト内包表記
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0