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

파이썬으로 좋은 식사 계산하기

<시간/>

좋은 식사에는 맛의 합이 2의 거듭제곱과 같은 정확히 두 가지 다른 음식 항목이 포함됩니다. 두 가지 다른 음식을 선택하여 좋은 식사를 만들 수 있습니다.

arr[i]가 i번째 음식 항목의 맛인 정수 배열을 제공했다고 가정하고 이 목록에서 만들 수 있는 다양한 좋은 식사의 수를 반환합니다.

예를 들어,

입력-1 -

arr[ ] = {1, 3, 5, 7, 9}

출력 -

4

설명 - 좋은 식사는 (1,3), (1,7), (3,5), (7,9)입니다. 각각의 합은 4, 8, 8, 16이며 모두 2의 거듭제곱입니다.

입력-2 -

arr[ ]= {1,1,1,3,3,3,7}

출력 -

15

설명 − 좋은 식사는 (1,1) 3가지 방법, (1,3) 9가지 방법, (1,7) 3가지 방법입니다.

이 문제를 해결하기 위해 사용된 접근 방식

  • 양의 정수 배열로 입력을 받습니다.

  • 함수 카운트 쌍은 모든 배열 요소를 정수 목록으로 사용합니다.

  • 입력 배열 요소를 오름차순으로 정렬합니다.

  • 배열의 모든 요소에 대해 모든 요소가 '2'의 거듭제곱이 되도록 최대 합을 찾습니다.

예시

class Solution:
   def countpairs(self, arr: List[int]) -> int:
      """
         elem1 + elem2 == 1 << i
         elem1 = 2 << i - elem2
      """
      result = 0
      seen = defaultdict(int)
      arr.sort()
      for d in arr:
         n = 1
         while n <= d + d:
            ans = (ans + seen[n-d]) % (10 ** 9 + 7)
            n = n << 1
         seen[d] += 1
      return ans
sol1= Solution()
print(sol1.countpairs([1,1,1,3,3,3,7]))

출력

4