# 실패 (시간 초과)
def solution(weights):
cnt = 0
weights.sort()
for i in range(len(weights) - 1):
for j in range(i+1, len(weights)):
a = weights[i]
b = weights[j]
if a == b: cnt += 1
elif b == 2*a: cnt += 1
elif b == 3*a / 2: cnt += 1
elif b == 4*a / 3: cnt += 1
return cnt
weights
를 오름차순으로 정렬1:1
, 1:2
, 2:3
, 3:4
의 비율을 갖는지 확인, 맞으면 cnt
증가시킴하지만, 이 경우 중첩for문이 사용되어 최악의 경우 100,000 * 100,000
번의 연산을 해야 하므로 시간초과다.
from collections import Counter
def solution(weights):
cnt = 0
weights.sort()
counter = Counter(weights)
for i in range(len(weights) - 1):
w = weights[i]
cnt += counter[w] - 1
cnt += counter[2*w]
cnt += counter[3*w / 2]
cnt += counter[4*w / 3]
counter[w] -= 1
return cnt
weights
를 정렬한다. weights
의 counter
를 만든다.weights
를 순회하며 1:1
, 1:2
, 2:3
, 3:4
의 비율을 갖는 수가 counter
에 있는 경우 그 수만큼 cnt
를 증가시킨다. counter
에서 현재 요소의 개수를 1 감소 시킨다.