第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 の試験ではよく出るけれど、どこで使うんだろう問題が出題されるっぽいです。結構応用効くんですけどね。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません