본문 바로가기
알고리즘

[프로그래머스 / 코딩테스트 연습] 약수의 개수와 덧셈-자바스크립트(javascript)

by 지 요니 2023. 7. 5.
🎍 문제 설명

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

 

🎍 제한 조건
  • 1 ≤ left ≤ right ≤ 1,000

 

🎍 입출력 예
left right result
13 17 43
24 27 52

 

🎍 나의 문제 풀이
function div(num) {
  let count = 0;

  for (let i = 0; i <= num; i++) {
    if (num % i == 0) {
      count++;
    }
  }
  return count;
}

function solution(left, right) {
  let answer = 0;
  for (let i = left; i <= right; i++) {
    let tmp = div(i);
    tmp % 2 === 0 ? (answer += i) : (answer -= i);
  }

  return answer;
}

간단하게 div라는 약수의 개수를 구하는 함수를 만들어준 후에,  left부터 right까지 약수가 짝수면 더해주고, 홀수면 빼주는 함수를 적용해서 문제를 풀었다.

 

 

🎍 다른 문제 풀이

👉  제곱근의 성질이용

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;
}

 

약수의 개수는 기본적으로 짝수인데, 어떤 수의 제곱인 경우(제곱근)에만 약수의 개수가 홀수임을 이용하여 풀어줌.

약수는 원래 나누어 떨어지는 수이므로 각각 곱해서 원래 수가 되는 짝이 있다. 하지만 제곱수인 경우는 자기 자신을 두 번 곱하기 때문에 약수가 홀수가 되는 것이다.

 

🟦 math.sqrt()
math.sqrt() :루트를 씌워주는 함수

 

댓글