안녕하세요

프로그래머스 JS 시소 짝꿍 (해시 맵) 본문

프로그래머스/Lv.2

프로그래머스 JS 시소 짝꿍 (해시 맵)

sakuraop 2023. 12. 12. 22:03

시소 짝꿍 (30) 문제 보기

탑승한 사람의 무게와 시소 축과 좌석 간의 거리의 곱이 양쪽 다 같다면 시소 짝꿍이라고 할 수 있습니다.

 

사람들의 몸무게 목록 weights이 주어질 때, 시소 짝꿍이 몇 쌍 존재하는지 구하여 return 하도록 solution 함수를 완성해주세요.


문제 풀이 

function solution(weights) {
  weights.sort((a, b) => a - b);
  const weightCounts = {};
  const units = [1, 2 / 3, 2 / 4, 3 / 4];

  let count = 0;

  for (let weight of weights) {
    for (let unit of units) {
      if (weightCounts[weight * unit]) {
        count += weightCounts[weight * unit];
      }
    }

    weightCounts[weight] ? weightCounts[weight]++ : (weightCounts[weight] = 1);
  }

  return count;
}

solution([100, 180, 360, 100, 270]);

해시 맵을 이용한다.

 

weight에 ( *1, *2/3, *2/4, *3/4 ) 을 각각 곱해본 결과가 해시맵에 존재하는지 확인한다.

존재한다면 해당 인원 수 만큼 count에 더해준다.

 

확인을 끝낸 후

해당 weight가 해시맵에 존재한다면 인원을 +1 해주고,
그렇지 않다면 해시맵에 새롭게 추가한다.