프로그래머스 LEVEL 2(시소 짝꿍)

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2023-01-22

  • 해결 방법 :

    • weights 별 개수를 map에 저장
    • 짝꿍이 될 수 있는 무게는 각 1.5, 4/3, 2배((2, 3), (3, 4), (2, 4))
      • 중복을 방지하기 위해 무게 비율은 오름차순으로만 구함
    • weights를 저장한 map을 돌며
      • 자신과 똑같은 무게를 가진 짝꿍 구하기(count * (count - 1) / 2)
      • ratios를 돌며 현재 자신의 무게와 짝꿍(ratio * weight)이 존재한다면
        • 짝꿍 몸무게와 만들 수 있는 개수 구하기(count * map.get(ratio * weight))
  • 회고 :

    • 처음에 비율을 생각하지 못하고 직접 무게마다 짝꿍을 일일이 구한 다음 현재 weight보다 큰 값일 때를 조건에 추가했다.
    • 하지만 비율로 생각하면 불필요한 로직을 줄일 수 있다.
  • 코드

    function solution(weights) {
      let answer = 0;
      const map = new Map();
      const ratios = [1.5, 4 / 3, 2];
    
      weights.forEach((weight) => {
        map.set(weight, (map.get(weight) || 0) + 1);
      });
    
      map.forEach((count, weight) => {
        answer += (count * (count - 1)) / 2;
    
        ratios.forEach((ratio) => {
          if (map.has(ratio * weight)) {
            answer += count * map.get(ratio * weight);
          }
        });
      });
    
      return answer;
    }
    
  • 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges