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

파이썬에서 합계가 k의 배수인 쌍으로 목록을 분할할 수 있는지 확인하는 프로그램

<시간/>

nums라고 하는 숫자 목록과 또 다른 값 k가 있다고 가정하고 각 쌍의 합이 k로 나눌 수 있도록 목록을 쌍으로 분할할 수 있는지 확인해야 합니다.

따라서 입력이 nums =[4, 7, 2, 5] k =6과 같으면 주어진 목록을 (4, 2) 및 (8, 1)과 같은 쌍으로 분할할 수 있으므로 출력은 True가 됩니다. 그 합계는 3으로 나눌 수 있습니다.

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

  • nums에 짝수개의 요소가 있으면
    • 거짓을 반환
  • count :=k 크기의 목록과 0으로 채우기
  • 숫자 단위의 각 n에 대해 다음을 수행합니다.
    • count[n mod k] :=count[n mod k] + 1
  • count[0]이 짝수이면
    • 거짓을 반환
  • 범위 1에서 (k / 2)의 몫까지 i에 대해
    • count[i]가 count[k - i]와 같지 않으면
      • 거짓을 반환
  • 참 반환

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

class Solution:
   def solve(self, nums, k):
      if len(nums) % 2:
         return False

      count = [0] * k
      for n in nums:
         count[n % k] += 1

      if count[0] % 2:
         return False

      for i in range(1, k // 2 + 1):
         if count[i] != count[k - i]:
            return False
      return True

ob = Solution()
nums = [4, 7, 2, 5]
k = 6
print(ob.solve(nums, k))

입력

[4, 7, 2, 5], 6

출력

True