[코딩테스트 연습] 약수의 개수와 덧셈


약수의 개수와 덧셈

문제 설명

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.


제한 사항

  • 1 ≤ left ≤ right ≤ 1,000


입출력 예

leftrightresult
131743
242752


입출력 예 설명

입출력 예 #1

  • 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.

    약수약수의 개수
    131,132
    141,2,7,144
    151,3,5,154
    161,2,4,8,265
    171,172
  • 따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.


입출력 예 #2

  • 다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.

    약수약수의 개수
    241,2,3,4,6,8,12,248
    251,5,253
    261,2,13,264
    271,3,9,274
  • 따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.


코드 작성

function solution(left, right) {
  let obj = {};
  let answer = 0;
  for (let i = left; i <= right; i++) {
    obj[i] = [];
    for (k = 1; k <= i; k++) {
      if (i % k === 0) {
        obj[i].push(k);
      }
    }
  }
  for (const el in obj) {
    if (obj[el].length % 2 === 0) {
      answer += el * 1;
    } else {
      answer += el * -1;
    }
  }
  return answer;
}

[ TIP ]
left ~ right 사이 수들의 약수를 구하고, 모든 약수를 객체 안에 배열 형태로 담아준다. for-in문을 활용하여 객체에 담긴 각 배열의 길이가 짝수 또는 홀수인지 확인하여 값을 구해준다.







© 2023. by MyeongheeJung

Powered by MH.J