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]와 같지 않으면
- 거짓을 반환
- 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