약수의 개수 덧셈

hyuri·2023년 9월 15일
0

코딩테스트 연습

목록 보기
19/70

내가 작성한 답

function solution(left, right) {
    let number = [];
    let i = left;
    let sum = 0;

    while (i < right){
        number = [];
        for(let j = 1; j<=left; j++){
            if(left % j == 0){
                number.push(j);
            }
        }
        i = left++;
        number.length % 2 === 0 ? sum += i : sum -= i;
    }
    return sum;
}
// while를 사용해서 범위 내의 숫자를 모두 순회하고 완전 제곱수를 판별하여 값을 더하거나 뺀다. 
// 루프 안에서 중복 계산이 발생하며 계속 초기화를 진행하기 때문에 성능적으로는 좋지 않음.

다른 답

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

// 중복 계산이 없고 완전 제곱수를 판별할 때 루트 연산을 사용해서 효율적임.

시간 차이가 너무 많이 남.

내가 작성한 함수는 중복 계산을 진행해서 비교적 시간 소요도 많이 되서 효율적이지 못함.

해석 및 사용한 함수

숫자의 제곱근이 정수로 떨어지면 약수의 개수는 홀수가 됨.
Number.isInteger - 정수가 맞는지 아닌지 확인
따라서, 제곱근이 정수인지 아닌지 확인하여 약수 개수 확인

와... 진짜 신기하다. 새로운 걸 알아냈다.. 와우

profile
개발자가 되고 싶은 지망생

0개의 댓글