第77回【Python】タイルの敷き詰め、積の最小化

現在取り組んでいるのは、paiza ラーニング問題集「条件分岐メニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

Python をゼロから勉強してみよう、のコーナー 77 回目です。

普段、会社では Slack を利用しています。LeoLuna(夫婦)でも利用しているのですが、さすがに 2 人だと LINE を使う方が便利です。まぁ、複数のチャンネルを作って、チャンネルのテーマに沿ったものを共有しておくという使い方だと良いのですが、無料枠内だと 90 日で消えて(非表示)しまうんだよなぁ。

それでは、今日も頑張ってみようと思います。

タイルの敷き詰め

高さH、幅Wの箱( 0 ≦ H, W ≦ 10^9 )があります。この箱を 1 つ以上の高さ 2 、幅 2 の四角いタイルで敷き詰めます。箱に隙間なくタイルを敷き詰めることはできますか?

H W

すべてのテストケースにおいて、以下の条件をみたします。

・ H, W は 0 以上 10^9 以下の整数


6 2

ちょっとだけひっかけ問題。1 つもタイルを敷くことができない場合も存在する。

Python
H,W = map(int,input().split())
if H < 2 or W < 2:
    print("NO")
elif H % 2 == 0 and W % 2 == 0:
    print("YES")
else:
    print("NO")
VBA
HW = Split(Cells(1, 1), " ")
H = Val(HW(0))
W = Val(HW(1))
If H < 2 Or W < 2 Then
    Debug.Print "NO"
ElseIf H Mod 2 = 0 And W Mod 2 = 0 Then
    Debug.Print "YES"
Else
    Debug.Print "NO"
End If

積の最小化

-1,000 ≦ A ≦ B ≦ 1,000 を満たす 2 つの整数 A, B が与えられます。A 以上 B 以下である 2 つの整数 X, Y を適当に選んだとき、X * Y の取り得る値の最小値を出力してください。なお、X と Y は同じ値でもよいものとします。
たとえば A が 3, B が 5 の場合について考えます。これは X と Y を両方とも 3 にしたときが最小で、 X * Y が 9 となります。

A B

すべてのテストケースにおいて、以下の条件をみたします。

・ A, B は -1,000 以上 1,000 以下の整数
・ A ≦ B


3 5

マイナスの範囲が存在するという点に注意。二つの数字から求められるパターンは 3 通りなので、それぞれの条件を考えてみれば解けそう。

Python
A,B = map(int,input().split())
if A <= 0 and B >= 0:
    # A が負の数 B が正の数
    print(A * B)
elif A > 0:
    # A も B も正の数
    print(A * A)
else:
    # A も B も負の数
    print(B * B)
VBA
AB = Split(Cells(1, 1), " ")
A = Val(AB(0))
B = Val(AB(1))
If A <= 0 And B >= 0 Then
    Debug.Print A * B
ElseIf A > 0 Then
    Debug.Print A * A
Else
    Debug.Print B * B
End If

最後に

これで「条件分岐メニュー」はすべて終了です。最後の 2 問はちゃんとパターン分けして考えないと小さな罠が隠れていました。テストで発覚するよくあるやつですね。

次回からは「論理演算メニュー」に挑戦します。半加算器や全加算器といった、IPA の試験ではよく出るけれど、どこで使うんだろう問題が出題されるっぽいです。結構応用効くんですけどね。

引き続き、よろしくお願いいたします!

Python学習,Python,paiza

Posted by LeoSaki