🔙
🔝

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

座席

座席

  • 例1

  • names = [input() for _ in range(9)]
    
    for i in range(3):
        print(*names[i*3:i*3+3])
    
  • 例2

  • for i in range(9):
        name = input()
        print(name, end='')
    
        if i % 3 == 2:
            print()
        else:
            print(end=' ')
    

    例1のスライスの書き方はちょくちょく使います。あえて解説はしません。わからないままにせず、出力例と見比べて理解してみてください。😉

    例2は Pythonのめんどくさい出力方法をめんどくさがらずに書きました。

平均と平均

平均と平均

    a, b = map(int, input().split())
    
    arithmetic = (a+b) / 2
    geometric = (a*b)**0.5
    
    if arithmetic == geometric:
        print('equal')
    elif arithmetic > geometric:
        print('arithmetic')
    else:
        print('geometric')
    

    **0.5 でルートになります。わりと使わされるので覚えておいてください。😓

親と子

親と子

    a, b = map(int, input().split())
    
    c = a * 2
    
    if c + 1 or c + 2:
        print('Yes')
    else:
        print('No')
    

    木とかノードとかわからなくても、とりあえず書かれていることを参考に組んでみたら、だいたいこんな感じになるのではないでしょうか?

    木構造は問題集にもありますが、難しいので気を付けてください。頭痛くなる。😫

卒論締め切り

卒論締め切り

    n, a, b = map(int, input().split())
    
    if a * b >= n:
        print('Yes')
    else:
        print('No')
    

    リアルに考えて、この計算だと提出期限にギリッギリ間に合わないような気がするのですが。😅

    提出日には何枚書けるの?提出日は書ける時間短いよ?

    n 枚ぴったり収まる?1枚でも多くなったら間に合わなくなるよ?

    1日多く取っておいたほうが良くない?


    という余計なことは考えなくてもいいみたいです。😆

WBC

WBC

  • 例1

  • w = input()
    
    if w == 'WBC':
        print('Yes')
    else:
        print('No')
    
  • 例2

  • w = input()
    
    if w.isupper():
        print('Yes')
    else:
        print('No')
    

    .isupper() は、文字列全体のアルファベットが大文字のみで構成されているかどうかを判別するメソッドです。対象はアルファベットのみなので、数字、記号、日本語、絵文字は対象外です。例えば、

    w = '1 ふ再A😻]'

    と、この中にアルファベットの大文字が1文字ある場合でも True となります。


    問題のとおり、"WBC" 限定なら例1にすべきです。でも条件を考慮すれば例2でもイケます。

    そしてお察しのとおり、.islower()メソッドもございます。😊

paiza とタイピング

paiza とタイピング

  • 例1

  • s = input()
    paiza = 'paiza'
    paiza_len = len(paiza)
    
    idx = 0
    for c in s:
        if c == paiza[idx]:
            idx += 1
        
        if idx == paiza_len:
            print('Yes')
            break
    else:
        print('No')
    
  • 例2

  • s = input()
    paiza = 'paiza'
    paiza_len = len(paiza)
    
    idx = 0
    all((idx:=idx+(c==paiza[idx])) < paiza_len for c in s)
    
    print('Yes' if idx == paiza_len else 'No')
    

    例2は、『工夫すれば行数減らせる!』というだけでパッと見、ちょっとわかりにくくておすすめはできない作り方です。😅

    例1も例2も、どちらも s を先頭から 'paiza' の1文字ずつを見つけながら探索しています。idx'paiza' の要素番号です。idx'paiza' の文字数 5 に達したら Yes を画面に出力してから break して終了します。idx が 5 に達しなかったということは 'paiza' と打ち込めなかったということです。

    例2の all() 関数は、idx をカウントする為の一文です。'paiza' の文字数 5 未満の時は True となり、0 か 1 をカウントします。(実際はこの評価よりカウントが先に行われますが😅)
    そして 'paiza' の文字数 5 に達すると False になり、 all() 関数も False になってこの関数を終了します。 all() 関数の変則的な使い方です。 みたいですね。😊