원소 수가 많아서 2중 반복문 실행 시 시간 초과
=> 반복문 한 번으로 처리해야 함
1. 오름차순 정렬
2. 객체에 각 몸무게를 가진 사람의 수 저장
3. 배열에 대해 반복
4. 현재 몸무게와 짝꿍이 될 수 있는 몸무게를 가진 사람의 수만큼 결과 증가
이때 경우의 수는 1:1, 3:2, 2:1, 4:3으로 4가지
반복 끝마다 현재 몸무게의 사람 수 -1을 해주어야 다음에 중복으로 세지 않음
function solution(weights) {
weights.sort((a, b) => a - b);
const obj = {};
weights.forEach((w) => (obj[w] = (obj[w] || 0) + 1));
let result = 0;
for (const weight of weights) {
if (obj[weight] > 1) result += obj[weight] - 1;
if (obj[weight * (3 / 2)]) result += obj[weight * (3 / 2)];
if (obj[weight * 2]) result += obj[weight * 2];
if (obj[weight * (4 / 3)]) result += obj[weight * (4 / 3)];
--obj[weight];
}
return result;
}
아무리 생각해도 반복문 하나로 처리하는 방법을 모르겠어서 다른 사람의 힌트 참고..
객체를 쓸 생각을 전혀 하지 못했다.