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

김문주·2024년 1월 22일
0

알고리즘

목록 보기
2/2
post-thumbnail

📄문제설명

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

제한사항
1 ≤ left ≤ right ≤ 1,000


💡문제이해

  • 주어진 left, right 범위 내의 모든 숫자 약수의 개수 구하기
  • 약수의 개수가 짝이면 더하고, 홀수면 뺀다.

💻코드작성

나의 풀이

function solution(left, right) {
    var answer = 0;
    for (let num = left; num <= right; num++) {
        let divisorsCount = 0; 
        
        // 약수의 개수 구하기
        for(let i = 1; i <= num; i++) {
            if(num % i === 0) {
                divisorsCount++;
            }
        }
        
        // 약수의 개수가 짝이면 더하고, 홀수면 뺀다.
        if(divisorsCount % 2 === 0) {
            answer += num;
        }else {
            answer -= num;
        }
    }
    return answer;
}

다른 풀이

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() 문법으로 제곱근을 구한 뒤 Number.isInteger() 문법을 사용하여 정수를 구별해 주고 제곱근이 정수인 경우 빼주고, 정수가 아닌 경우에는 더해 줬다.
기억하자 제곱근이 정수면 약수의 개수는 홀수다...✍️

profile
안녕하세요:)

0개의 댓글