🔙
🔝

Cランク実力確認問題セット2

ヒントを頼りにプログラムを組んでみてください。

しりとり

しりとり

1文字を取得する

1文字を取得する

    問題文に書かれているとおり、入力 S の末尾の文字と、入力 T の先頭の文字が一致しているかどうかを判定するプログラムを作ることが求められているところまではわかると思います。まずは入力 S の末尾の文字と、入力 T の先頭の文字を取得することを目指します。

len()関数を使う

len()関数を使う

    文字列からある1文字を取得するには添字を使いますが、1文字目を参照する文字列 T はともかく、文字数が定まっていない文字列 S の末尾をどう狙い撃ちするかが問題です。

    そこで len() 関数を使って文字列 S の文字数を取得し、末尾の文字を参照します。その際文字数と、0から数える文字列の位置番号に1差が生じますので、そこに注意して文字列 S の末尾の文字を取得してみましょう。

添字で末尾を取得する

添字で末尾を取得する

    Python3は、添字に負の整数を使うと末尾から順に参照できます。こちら にある表を参考にプログラムを組んでみてください。

文字列を逆順にする

文字列を逆順にする

    文字列を逆順にすると、末尾にあった文字が先頭に位置するようになります。

    2章 - リスト型

    この問題にはこの方法はふさわしいとは言い難いのですが、この方法でも組んでみてください。結果理想通りに動かなかったとしても、思いついたことはできるだけ形にしてみることも大切です。👍

正規表現を使う

正規表現を使う

    Dランクレベルの解き方ではありませんが、正規表現を使うとより自由度が高まります。

    import re
    
    S, T = input().split()
    s = re.search(r".$", S).group()
    t = re.search(r"^.", T).group()
    
    if s == t:
        print('YES')
    else:
        print('NO')
    

    『なにこれ、どうなってんの?』と興味がわきましたら、paiza問題集にも正規表現が学べる問題集がありますので、ぜひこなしてみてください。今解いてるこの問題集を修了できるレベルなら難しくはないでしょう。その 正規表現の問題集の解説 もありますので、そちらも参考にしてみてください。

投票サイト

投票サイト

    これは、elseのいずれかを使って組み上げられます。

    文の基本さえわかれば難しいことはないでしょう。

宿題管理

宿題管理

    それぞれの入力から M 以下の数を探してカウントするという線形探索問題です。1つずつ入力しながら調べるか、すべての値を取得してから1つずつ調べていくかの違いくらいで、プログラムの構成は大きく異なりますが、やることは同じです。

    • 比較演算
    • 型変換

    プログラミングの基礎が盛り込まれた問題になっています。1つの方法だけでなく、100点を取れなくても構いませんので、あらゆる組み方をぜひ考えてみてください。ここで頭をやわらかくしておくと後々ラクになります。😄

M 件目の仕事

M 件目の仕事

考え方

考え方

    を使ってカウントしていけば求められます。

    もう1つ、剰余算(余りを求めるアレ)を使っても求められます。この方法ならば1つの計算式を作るだけで一発で求められます。


    結果は n番目ではなく、n番目の人の名前を出力しますので、どちらの方法も名前をリストにして使うことにします。

for文を使って求める

for文を使って求める

    まず、n番目の仕事を請け負う人が何番目の人かを求めます。問題の入力例の場合、

    1番目 → 0
    2番目 → 1
    3番目 → 2
    4番目 → 3
    5番目 → 0
    6番目 → 1
    7番目 → 2

    で、3番目の人が請け負うことになります。ゼロから数えるので 1 を引いて 2 となります。

    3 を超えたら 0 に戻す方法は、文を使って、カウントを 0 に初期化すれば 0 〜 3 の範囲をループするようになります。

剰余算を使って求める

剰余算を使って求める

    入力値を見ると、単純に、

    7 % 4 = 3

    とすることで、3番目がすぐに割り出せそうなことに気づくと思います。

結果を出力する

結果を出力する

    最後に結果を出力するのですが、求められている出力は n番目ではなく、n番目の人の名前です。そのために予め名前をリストとして取得しておきます。

    S = ['ichiro', 'jiro', 'saburo', 'shiro']

    リストの要素番号はゼロから始まります。 を使った方法ならばそのまま添字に使えますが、剰余算で求めた場合は、その結果から 1 を引く必要があります。その添字を使って画面に出力すればOKです。

    リストを使わない方法で名前を出力することもできます。

    最初に NM だけを入力し、n番目を求めてから、名前の入力を n回ループします。

    for i in range(n):
        result = input()
    
    print(result)
    

    これは一回だけ出力する方法にしか使えません。繰り返し求めて出力する場合にはやはりリストが便利です。複数の値をリストにすることで、それらの値を何回でも利用することができるようになります。(再利用)

他の方法も考える

他の方法も考える

    リストの代わりに辞書を使う方法もあります。今回のような単純な問題の方法としてはプログラムが複雑化してしまいますのであまりおすすめしませんが、ぜひともヒント無しで挑戦してみてください。辞書の作成や扱いに慣れていない方にとっては、良い訓練になるでしょう。