사실 여기서 막혀서 다른 풀이들을 봤는데 이해하는데 한참 걸려서 내 풀이로 다시 정리해봤다. 문제가 친절하지 않아서 좀 헤맨 것 같다. 만약 [100,100,100,200] 이라고 하면 (100,100) 이 한 쌍이 가능한게 아니라 3쌍이 가능하다. 인덱스로 치면 (0,1),(0,2),(1,2) 의 3 쌍이 존재한다. 그리고 4m에 100, 2m에 200 이 가능한데, 이 또한 (0,3),(1,3),(2,3) 의 3 쌍이 존재한다. 총 6 쌍이 존재한다. 결국 Counter를 사용하여 각 무게의 개수를 사용하여 계산한다
from collections import Counter
def solution(weight):
answer = 0
counter = Counter(weight)
for k in counter.keys():
# 동일한 무게에 대해 nC2 계산. 어차피 n=1 이라면 0이기 때문에 if가 필요없다. 2:2 비율인 무게 계산
answer+=counter[k]*(counter[k]-1)//2
# 2:3 비율인 무게에 대해 계산. k*3/2 가 w에 포함된 정수가 아니라면 counter가 0 이 나온다.
# k = 180 이라고 하면 무게가 270 인 것의 개수를 찾아서 계산한다.
# 반대로 k = 270 인 경우 무게가 180 인 것의 개수를 찾으려면 k*2/3을 하면 된다.
# 즉 2:3 인 비율을 한 번만 찾고 3:2의 비율은 계산하지 않기 때문에 두 번 더하지 않는다.
answer+=counter[k]*counter[k*3/2]
# 위와 마찬가지로 더해준다
answer+=counter[k]*counter[k*2]
answer+=counter[k]*counter[k*4/3]
print(k,answer)
return answer