CK 026|最小矩形(python)



質問する


🔗 第8週Weeklyチャレンジ|最小矩形
名刺入れを作っている会社は財布の大きさを確認したいです.様々な形や大きさの名刺を収納でき、コンパクトで持ち運びに便利な財布を作る必要があります.これらの要件を満たすために、設計チームはすべての名刺の横方向と縦方向の長さを調査した.
次の表に、4種類の名刺の水平と垂直の長さを示します.
名刺番号横長160502307030603048040
最も長い横長と縦長はそれぞれ80と70であるため、80(横)x 70(縦)サイズの財布を作成すると、すべての名刺を収容することができる.ただし、横に2番の名刺を収納する場合は、80(横)x 50(縦)サイズの財布ですべての名刺を収納できます.財布のサイズは4000(=80 x 50)です.
パラメータは、すべての名刺の水平と垂直の長さを表す2 D配列サイズです.すべての名刺を収納できる最小財布を作成する場合は、財布の大きさを返すための解関数を完了します.

せいげんじょうけん

  • サイズの長さは1,000より大きい.
  • sizeの要素は[w,h]形式です.
  • wは名刺の横長を表す.
  • hは名刺の縦の長さを表す.
  • wおよびhは1000より大きい自然数である.
  • 私が書いたコード

    def solution(sizes):
        
        sizes = [[w,h] if w>=h else [h,w] for w,h in sizes]
        
        return max([sizes[i][0] for i in range(len(sizes))]) * max([sizes[i][1] for i in range(len(sizes))])
    まず各名刺の横、縦の長さを比較し、大きいものは0番のインデックスに、小さいものは1番のインデックスに、各最値を求め、乗算して面積を求める.

    他人の解答

    solution = lambda sizes: max(sum(sizes, [])) * max(min(size) for size in sizes)
    def solution(sizes):
        return max(max(x) for x in sizes) * max(min(x) for x in sizes)
    論理は同じですが、より簡潔なコードは...🥲 もっと勉強しなきゃ