function solution(weights) {
let answer = 0;
// ✅ { 몸무게(weight): 사람 수(num) }
let info = {};
const RATIOS = [1.5, 4 / 3, 2];
// ✅ weights 배열의 정보를 info 객체로 정리
weights.forEach(weight => info[weight] = (info[weight] || 0) + 1);
// ✅ info 객체를 배열로 변환 후 순회한다
for (const [weight, num] of Object.entries(info)) {
// ✅ 몸무게가 같은 사람들 간 시소 짝꿍 수를 구한다 (조합 공식 활용)
// ✅ RATIOS 배열에 1을 담지 않은 이유
answer += num * (num - 1) / 2;
for (const ratio of RATIOS) {
if (info[ratio * Number(weight)]) {
answer += num * info[ratio * Number(weight)];
}
}
}
return answer;
}
입력값의 제한은 다음과 같다.
배열 weights에 대한 이중 for문 풀이는 힘들다고 생각했다.
약간의 수학적 지식(조합 공식)을 사용했다.