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

hhkim·2023년 11월 1일
0

Algorithm - JavaScript

목록 보기
172/188
post-thumbnail

풀이 과정

원소 수가 많아서 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;
}

🤔

아무리 생각해도 반복문 하나로 처리하는 방법을 모르겠어서 다른 사람의 힌트 참고..
객체를 쓸 생각을 전혀 하지 못했다.

0개의 댓글