Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 곱한 숫자의 최대 합을 찾는 프로그램

<시간/>

숫자와 승수라는 두 개의 목록이 있다고 가정합니다. 이제 숫자에서 임의의 숫자를 제거하고 승수에서 임의의 숫자를 제거한 다음 함께 곱할 수 있는 연산을 고려하십시오. 목록 중 하나가 비어 있을 때까지 이 작업을 반복해야 하며 곱한 숫자의 최대 합을 찾아야 합니다.

따라서 입력이 nums =[-4, 4, 3] multipliers =[-2, 2]와 같으면 출력은 16이 됩니다. -4를 -2와 일치시키고 4를 2와 일치시켜 -4를 얻을 수 있기 때문입니다. * -2 + 4 * 2.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 목록 번호 정렬

  • 목록 승수 정렬

  • 해상도 :=0

  • 숫자의 크기 <승수의 크기인 경우

    • 숫자와 승수 교환 :=승수, 숫자

  • n :=숫자 크기

  • m :=승수의 크기

  • 0 ~ m - 1 범위의 i에 대해 수행

    • 승수[i] <=0이면

      • res :=res + nums[i] * 승수[i]

    • 그렇지 않으면

      • res :=res + 승수[i] * nums[n -(m - i)]

  • 반환 해상도

예시

더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

def solve(nums, multipliers):
   nums.sort()
   multipliers.sort()
   res = 0
   if len(nums) < len(multipliers):
      nums, multipliers = multipliers, nums

   n, m = len(nums), len(multipliers)
   for i in range(m):
      if multipliers[i] <= 0:
         res += nums[i] * multipliers[i]
      else:
         res += multipliers[i] * nums[n - (m - i)]
   return res

nums = [-4, 4, 3]
multipliers = [-2, 2]
print(solve(nums, multipliers))

입력

[-4, 4, 3], [-2, 2]

출력

16