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

728x90
반응형

(1) 내 코드

function solution(left, right) {
 
    let answer = 0;
    let cnt = 0;
 
    for (let i = left; i <= right; i++) {
        cnt = 0;

        for (let x = 0; x <= i; x++) {
            if (i % x === 0) {
                cnt++;
            }
        }

        if (cnt % 2 === 0 ? (answer += i) : (answer -= i));
    }
    return answer;
}

▶ input : 13,17 / output : 43

▶ 13부터 17사이의 약수의 개수 구하기 + 약수의 개수가 짝수면 더하기 & 홀수면 빼기

1) 약수 구하기 : 13 % n ===0 약수 (n은 1~13사이의 모든 수)

2) 13부터 17사이의 숫자: 1차 반복 => 그 안에서 약수 구하기 = 중첩 반복문 사용

3) 약수가 있을때마다 cnt++ : 개수 찾기

4) 13숫자 cnt 돌고나서 14 숫자의 약수 찾을때 cnt =0으로 초기화

5) cnt의 개수가 짝수이면 더하고 홀수이면 빼기

 

(2) 다른 사람 풀이

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(숫자) => 제곱근이 정수 (isInterger) =  약수의 개수 : 홀수

[예시]

Number.isInteger(Math.sqrt(13)) = false

Math.sqrt(13) = 3.605551275463989

 

Number.isInteger(Math.sqrt(16)) = true

Math.sqrt(13) = 4

=> 약수의 개수가 홀수

 

 

[Math.sqrt()] : 주어진 숫자에 루트( )를 씌웁니다

Math.sqrt(9); // 3
Math.sqrt(2); // 1.414213562373095

Math.sqrt(1); // 1
Math.sqrt(0); // 0
Math.sqrt(-1); // NaN

 

[Number.isInteger()] : 주어진 값이 정수인지 판별

Number.isInteger(value); --> true/false 반환

 

끝.

 

반응형