시간 초과코드
def solution(weights):
answer = 0
weights.sort()
for i in range(len(weights)):
for j in range(i+1, len(weights)):
if weights[i] == weights[j]:
answer += 1
elif weights[i] * 2 == weights[j]:
answer += 1
elif weights[i] * 2 > weights[j]:
if weights[i] * 3 == weights[j] * 2:
answer += 1
if weights[i] * 4 == weights[j] * 3:
answer += 1
return answer
def solution(weights):
answer = 0
d = dict()
for w in weights:
if w in d:
d[w] += 1
else:
d[w] = 1
for w in d.keys():
if d[w] >= 2:
answer += d[w] * (d[w] -1) // 2
if w * 2 in d:
answer += d[w] * d[w*2]
if w * 3/2 in d:
answer += d[w] * d[w*3/2]
if w * 4/3 in d:
answer += d[w] * d[w*4/3]
return answer
이 문제는 딕셔너리를 통해 구할 수 있다.
주어진 weights를 순회하면서 중복 값이 나오면 +1 해주면서 정보를 저장해간다.
그 후 key 값을 순회하면서 수평에 맞는 조건을 통해 answer를 구할 수 있다.
스스로 풀지 못 한 문제 아직은 이 문제처럼 알고리즘 보다는 수학적 사고가 요구되는 문제엔 익숙하지 않다.