[JS] 프로그래머스 - 시소 짝꿍

DARTZ·2023년 7월 6일
0

알고리즘

목록 보기
130/135

문제 링크

정답 풀이

function solution(weights) {
    var answer = 0;
    const hash = {};
    const method = [1, 3/2, 4/3, 2];
    
    weights.sort((x,y) => y - x);
    
    weights.forEach((weight) => {
        let temp;
        for (const m of method) {
            temp = weight * m;
            answer += hash[temp] ? hash[temp] : 0;
        }
        hash[weight] ? hash[weight]++ : hash[weight] = 1;
    })
    
    return answer;
}

기존에는 조합과 조건문을 사용해서 풀이했지만 시간 초과가 발생해서 다른 방법을 찾던 중에 hash를 사용한 방법을 알게 되었습니다.

문제를 푸는 아이디어는 다음과 같습니다.

  • weights를 정렬을 통해 내림차순으로 변경해줍니다.
  • 각 몸무게에 나올 수 있는 경우의 수는 1, 3/2, 4/3, 2가 전부이므로 이를 각각 곱합니다.
  • 곱한 값이 hash에 존재하면 hash값 만큼 answer에 더해줍니다.
  • 현재 몸무게가 hash값에 존재하면 +1을 해주고 아니면 1로 저장해줍니다.

문제를 풀면서 헷갈렸던게 있는데 만약에 weights가 [100, 100]일 경우 정답은 1이 되지만 [100, 100, 100]일 경우 3이 되다는 것이였습니다.
생각해보니 같은 시소를 탈 때, A와 B가 왼쪽에 앉던 오른쪽에 앉던 상관 없으니 다른 사람들끼리만 타는 경우를 구해주면 되는걸로 이해했습니다.

profile
사람들이 비용을 지불하고 사용할 만큼 가치를 주는 서비스를 만들고 싶습니다.

0개의 댓글