[Codility/Lesson6]MaxProductOfThree(python)



|1特

import math
def solution(A):

    length_A = len(A)
    if length_A== 3:
        return math.prod(A)

    sorted_A = sorted(A)

    min_num_multiply = sorted_A[0] * sorted_A[1]
    max_num_multiply = sorted_A[length_A - 3] * sorted_A[length_A - 2]
    last_num = sorted_A[length_A-1]

    
    answer = last_num * max(min_num_multiply, max_num_multiply) if last_num >= 0 else last_num * min(min_num_multiply, max_num_multiply)



    return answer

3つの
  • の長さに
  • を乗算する
  • min num multiplyは、ソート後に最初に現れる2つの値に負数を乗じたときの最大値
  • である.
  • max num multiplyは最後尾と前の2つの値の積から、2つの数が乗算されたときの最大値
  • である.
  • 最後の値(最大値)が負の場合、この2つの値の最小値、最大値が正の場合、この2つの値の最大値
  • を乗じる.
  • 負数の場合は変な結果にならないのではないかと心配されていますが、いずれも負数であれば最大の節値が最小になるので、安心して
  • を計算できます.
    結果はここです。

    例外処理を行ったため、3つの設計テスト例はありません.
    そんな結果….🤷‍♀️

    |2トン

    import math
    def solution(A):
    
        length_A = len(A)
        if length_A== 3:
            return A[0] * A[1] * A[2]
     
        sorted_A = sorted(A)
        #print(sorted_A)
    
        min_num_multiply = sorted_A[0] * sorted_A[1]
        max_num_multiply = sorted_A[length_A - 3] * sorted_A[length_A - 2]
        last_num = sorted_A[length_A-1]
    
        #print(min_num_multiply, max_num_multiply, last_num)
        answer = last_num * max(min_num_multiply, max_num_multiply) if last_num >= 0 else last_num * min(min_num_multiply, max_num_multiply)
    
    
    
        return answer
    結果はここです。
  • なんといっても法典的にはmathprod()関数
  • はサポートされていない可能性があります.
  • なので、まず彼らに手作業で帰らせます.
  • でも、試験用例を書く習慣を身につけなければならない.