🔙
🔝

【paiza問題集 解説】
paizaの森練習問題コンテスト過去問題セット6

球数制限

球数制限

    n, k = map(int, input().split())
    m = sum(int(input()) for _ in range(n))
    
    print('Yes' if m < k else 'No')
    

    リスト内包表記で入力するのと同様に、 sum() 関数の引数に内包表記で書くこともできます。list()sum() になったと見ればわかるかと思います。

最大イニング

最大イニング

  • 例1

  • k = int(input())
    
    ball = 0
    for i in range(1, 10):
        m = int(input())
        
        if ball + m > k:
            ball += m
            break
    
    if i == 9:
        print('Yes')
    else:
        print(i)
    
  • 例2

  • k = int(input())
    
    ball = 0
    for i in range(1, 10):
        m = int(input())
        
        if (ball:=ball + m) > k:
            break
    
    print('Yes' if i == 9 else i)
    

    例1、例2共通して言えるのが、 文で使った変数 i は、ループを抜けても値が残っているという点です。その i を最後の出力時の判定にも用いています。

    問題文の最後の一行にある条件は、用いる比較演算子で解決できます。


  • 6イニングでぴったり投げきった時

  • > で比較した時
    次のループに移り、i7 になってから break します。
    >= で比較した時
    ぴったりなので、i6 の時点で break してしまいます。

    例2で使われている := の意味は「3章 補足 - :=」で知ることができます。

ロボットの移動

ロボットの移動

    x, y = map(int, input().split())
    print(abs(x) + abs(y))
    

    (0, 0) を中心としているので、マイナスの値(負数)になったとしても移動ステップ数は変わりません。

    3ステップ -3 ← 0 → 3 3ステップ

    x も y も 絶対値にしてしまいましょう。

最大の差

最大の差

    points = [int(input()) for _ in range(5)]
    print(max(points) - min(points))
    

    max() 関数と min() 関数に引数にあてるため、入力はリストにして受け取ります。そして最大値から最小値を引いた数を求めればOK👌。

中央値

中央値

    points = [int(input()) for _ in range(5)]
    print(sorted(points)[2])
    

    ソートして真ん中の要素番号を指定すればOK👌。要素数が奇数なので、必ず中央があります。変数にすると、

    n = 5  # 必ず奇数であることが条件
    points = [int(input()) for _ in range(n)]
    print(sorted(points)[n//2])  # 5//2 = 2
    

    と書けます。

採点

採点

  • 例1

  • n = int(input())
    
    point = 0
    for _ in range(n):
        m = input()
        
        if m == 'correct':
            point += 2
        elif m == 'incorrect':
            point -= 1
    
    print(point)
    
  • 例2

  • n = int(input())
    m = [input() for _ in range(n)]
    
    point = 0
    for result in m:
        if result == 'correct':
            point += 2
        elif result == 'incorrect':
            point -= 1
    
    print(point)
    
  • 例3

  • n = int(input())
    m = [input() for _ in range(n)]
    scoring_list = {'correct': 2, 'incorrect': -1,'no_answer': 0}
    
    point = sum(scoring_list[result] for result in m)
    print(point)
    

    例1は個別に読み込んで採点しています。

    例2は入力をリストに全て読み込んでから採点しています。

    例3は解答結果とそれに関係した点数を辞書にして、 sum() 関数で合計点を算出しています。