🧬알고리즘/Programmers

[JavaScript] 약수의 개수와 덧셈

뉴발자 2024. 9. 9. 18:28
728x90

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

문제

두 정수 left와 right가 매개변수로 주어진다.

 

left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고,

 

약수의 개수가 홀수인 수는 뺀 수를 반환하는 함수를 작성하라.

 

 

예시

left right return
13 17 43
24 27 52

 

  • 13의 약수는 [1, 13]이므로 더해준다.
  • 14의 약수는 [1, 2, 7, 14]이므로 더해준다.
  • 15의 약수는 [1, 3, 5, 15]으므로 더해준다.
  • 16의 약수는 [1, 4, 16]이므로 빼준다.
  • 17의 약수는 [1, 17]이므로 더해준다.

따라서, 결과값은 13 + 14 + 15 - 16 + 17인 43이 반환된다.

 

 

나의 풀이

function solution(left, right) {
  let cnt = 0, result = 0;
    
  for (let i = left; i <= right; i++) {
    for (let j = 1; j <= i; j++) {
      if (i % j === 0) {
        cnt++;
      }
    }
        
    cnt % 2 === 0 ? result += i : result -= i;
    cnt = 0;
  }
    
  return result;
}

 

 

다른 풀이

function solution(left, right) {
  var answer = 0;
  for (let i = left; i <= right; i++) {
    if (Number.isInteger(Math.sqrt(i))) {
      answer -= i;
    } else {
      answer += i;
    }
  }
  return answer;
}

 

 

풀이 방법

나의 풀이 방법

1. left 부터 right까지의 숫자의 약수를 구하기 위해 for() 문을 사용해서 반복해준다.

function solution(left, right) {
  let cnt = 0, result = 0;
  
  // 1
  for (let i = left; i <= right; i++) {
    ...
  }
}

 

2. 각 숫자의 약수의 개수를 구하기 위해 for() 문을 한번 더 사용해서 약수의 개수를 구한다.

function solution(left, right) {
  let cnt = 0, result = 0;
    
  // 1
  for (let i = left; i <= right; i++) {
    // 2
    for (let j = 1; j <= i; j++) {
      if (i % j === 0) {
        cnt++;
      }
    }
  }
}

 

3. 약수의 개수가 짝수일 경우 결과값에 더해주고, 홀수일경우 결과값에 빼준 후 cnt 변수를 초기화한다.

function solution(left, right) {
  let cnt = 0, result = 0;
  
  // 1
  for (let i = left; i <= right; i++) {
    // 2
    for (let j = 1; j <= i; j++) {
      if (i % j === 0) {
        cnt++;
      }
    }
    
    // 3
    cnt % 2 === 0 ? result += i : result -= i;
    cnt = 0;
  }
    
  return result;
}

 

 

다른 풀이 방법

1. for() 문을 사용해서 left부터 right까지 반복해준다.

function solution(left, right) {
  var answer = 0;
  
  // 1
  for (let i = left; i <= right; i++) {
    ...
  }
  return answer;
}

 

2. 만약 제곱근이 정수이면 약수의 개수는 홀수가 되므로 결과값에서 빼주고, 정수가 아닌 경우 약수의 개수는 짝수가 되므로 더해준다.

function solution(left, right) {
  var answer = 0;
  
  // 1
  for (let i = left; i <= right; i++) {
    // 2
    // 제곱근이 정수인 경우 = 약수의 개수가 홀수
    if (Number.isInteger(Math.sqrt(i))) {
      answer -= i;
    } else {
      answer += i;
    }
  }
  return answer;
}

 

 

 

 

 

 

 

 

 

 

728x90