積の最小化

#お題

-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

 

 

 


#出力

答えとなる数値Nを出力してください。末尾に改行を入れ、余計な文字、空行を含んではいけません。

N

 

 

 


#コード

a, b = [int(x) for x in input().split()]

if a <= 0 and b >= 0:
    # a から b の間に 0 が含まれる
    print(a * b)
elif a > 0:
    # a と b が両方とも正の数
    print(a * a)
else:
    # a と b が両方とも負の数
    print(b * b)

 

 

 


#参考

a, b = [int(x) for x in input().split()]

if a <= 0 and b >= 0:
    # a から b の間に 0 が含まれる
    print(a * b)
elif a > 0:
    # a と b が両方とも正の数
    print(a * a)
else:
    # a と b が両方とも負の数
    print(b * b)

  • 上記の方針の通りに作成しました。
  • 以下で if 文 の構造を見ていきます。
    • 【 if a <= 0 and b >= 0: 】
      • ここは、a と b の範囲が 0 を跨ぐときに実行されます。
    • 【 elif a > 0: 】
      • ここは、a と b が両方とも正の数であるときに実行されます。
      • a ≦ b が成立しているので、a > 0 の条件のみで構いません。
    • 【 else: 】
      • ここは、a と b が両方とも負の数であるときに実行されます。
      • なぜ、負の数であるときだけ実行されるのか簡単に説明します。
        • ここに到達するということは、以下の命題がすべて偽だったということです。
          • a が 0 以下 かつ b が 0 以上である
          • a と b がともに正の数である
        • つまり、以下のことが言えます。
          • a と b の符号は同じである
          • a は正の数ではない
        • よって、導き出されるパターンは以下の通りです。
          • a と b はともに負の数である