고유한 양수 값을 가진 배열 nums가 있다고 가정하고 a*b =c*d가 되도록 튜플 수(a, b, c, d)를 찾아야 합니다. 여기서 a, b, c, d는 nums의 요소입니다. , 그리고 모든 요소 a, b, c 및 d는 고유합니다.
따라서 입력이 nums =[2,3,4,6]과 같으면 (2,6,3,4), (2,6,4,3)과 같은 튜플을 얻을 수 있으므로 출력은 8이 됩니다. , (6,2,3,4), (6,2,4,3), (3,4,2,6), (4,3,2,6), (3,4,6,2) , (4,3,6,2).
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- dic :=빈 지도, 일부 키가 없으면 기본값은 0입니다.
- an:=0
- 0에서 nums - 2 크기의 범위에 있는 i에 대해
- i+1 ~ 숫자 크기 범위의 j에 대해
- dic[nums[i]*nums[j]] :=dic[nums[i]*nums[j]] + 1
- i+1 ~ 숫자 크기 범위의 j에 대해
- dic의 모든 값 목록에 있는 각 v에 대해 do
- v가 1과 같으면
- 다음 반복으로 이동
- v:=v-1
- s:=(v/2) * (8+8*v)
- ans :=ans + s
- v가 1과 같으면
- 정수로 반환
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
from collections import defaultdict def solve(nums): dic = defaultdict(int) ans=0 for i in range(len(nums)-1): for j in range(i+1,len(nums)): dic[nums[i]*nums[j]]+=1 for v in dic.values(): if v==1: continue v=v-1 s=(v/2) * (8+8*v) ans+=s return int(ans) nums = [3,4,6,2] print(solve(nums))
입력
[3,4,6,2]
출력
0