[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 하도록 했다
- 맞을 거 같아도 테스트케이스를 짜는 습관을 들여야겠다
Author And Source
이 문제에 관하여([Codility/Lesson6]MaxProductOfThree(python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@zzarbttoo/CodilityLesson6Distinctpython-tlzmpkho저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)