본문 바로가기
Algorithm

[JavaScript] 프로그래머스 - 약수의 개수와 덧셈

by 랩린안 2022. 9. 25.
/*
문제 : left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고,
 약수의 개수가 홀수인 수는 뺀 수를 return
자료 : 두 정수 left와 right
조건 : 
계획 : 
풀이 안에 적어놨음

반성 :
합을 먼저 다 구한뒤 빼는 방법도 있구나.
여러 방법을 생각하지 못하는 게 아쉬움...

*/

const solution = (left, right) => {
  let sum = 0;
  // 약수 구하는 법. left rgiht 순회하면서 1부터 i까지 커지는 j가 있다고하면  i % j  === 0 이면 약수인 숫자 횟수에 추가
  // 횟수 % 2 === 0이면 합을 더함
  for (let i = left; i <= right; i++) {
    let count = 0;
    for (let j = 1; j <= i; j++) {
      if (i % j === 0) {
        count = count + 1;
      }
    }
    if (count % 2 === 0) {
      sum = sum + i;
    } else {
      sum = sum - i;
    }
  }
  return sum;
};

// 다른 사람 풀이
const solution2 = (left, right) => {
  // 일단 전체의 합계를 다 더하고 거기서 제곱수인걸 빼줌. 제곱근이 정수면 약수의 개수가 홀수라서.
  let sum = ((left + right) / 2) * (right - left + 1);

  for (let i = left; i <= right; i++) {
    if (Number.isInteger(Math.sqrt(i))) {
      console.log(sum, i);
      sum = sum - i * 2;
    }
  }

  return sum;
};