프로그래머스 Lv.2 시소짝꿍

Kim Jason·2023년 4월 4일
0

알고리즘 노트

목록 보기
30/35
post-thumbnail

💁🏻 코드

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;
}

입력값의 제한은 다음과 같다.

  • 2 <= 사람들의 몸무게를 담은 배열 weights의 길이 <= 100,000

배열 weights에 대한 이중 for문 풀이는 힘들다고 생각했다.
약간의 수학적 지식(조합 공식)을 사용했다.

profile
성장지향형 프론트엔드 개발자

0개의 댓글