[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개인 것은 그냥 곱해서 return 하도록 했다
  • min_num_multiply는 sorted 해서 가장 맨 처음에 나오는 두개의 값을 곱한 거로 음수끼리 곱했을 때 가장 큰 값
  • max_num_multiply는 sorted 해서 가장 맨 뒤에서 앞, 그 앞에 나오는 두개의 값을 곱한거로, 양수끼리 곱했을 때 가장 큰 값
  • 만일 맨 마지막 값(가장 큰 값) 이 음수이면 이 둘 중 작은 값을, 가장 큰 값이 양수이면 이 둘 중 가장 큰 값과 곱한다
  • 모두가 음수일 때 이상하게 나오는거 아니야라고 걱정할 수 있지만, 모두 음수라면 가장 큰 값의 절댓값이 가장 작으므로 안심하고 계산해도 된다

결과는 여기서


예외처리를 해놔서 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

결과는 여기서

  • 아무래도 codility에서는 math.prod() 함수가 지원이 안되나보다
  • 그래서 일단 수작업으로 return 하도록 했다
  • 맞을 거 같아도 테스트케이스를 짜는 습관을 들여야겠다

좋은 웹페이지 즐겨찾기