본문 바로가기
기초다지기/JS 코딩테스트

javascript 두 정수 left, right 사이 정수들 약수 갯수와 덧셈

by 김빵그 2023. 10. 20.

 

문제

두 정수 left와 right가 매개변수로 주어진다. left부터 right까지 모든 수에서 약수의 개수를 구해 짝수인 수는 더하고, 홀수인 수는 뺀 수를 리턴하여라

나의 풀이 1 

function solution(left, right) {
    var answer = 0;
  
    while(left <= right) {
        var arr = [];
        for(let i = 1; i <= left; i++) {
             if(left % i === 0) {
                 arr.push(i);
                 
             }
        }
        arr.length % 2 == 0 ? answer += left : answer -= left 
        left++;
    }
    
    return answer; 
}
  • while 루프를 사용하여 left가 right 이하인 동안 반복하는 코드를 짠다
  • 각 숫자마다 약수의 개수를 저장하는 배열 arr 생성
  • for를 사용하여 1부터 left까지 숫자를 반복하며 약수를 찾는다 약수를 찾을 때마다 arr 배열에 추가
  • arr.length를 통해 약수의 개수를 확인하고, 짝수인 경우 더하고 홀수인 경우를 뺀다

나의 풀이 2 (리팩토링) 

function solution(left, right) {
    var answer = 0;
  
    for (let num = left; num <= right; num++){
        var count = 0;
        for(let i = 1; i<= num; i++){
            if(num % i === 0){
                count++
            }
        }
        answer += count % 2 === 0 ? num : -num
    } 
    return answer; 
}
  • while문을 for문으로 변경하고 arr에 배열로 담아 길이를 비교한 대신 count를 사용했다
  • 약수의 갯수마다 카운트하여 이 수가 짝수인지 홀수인지 구분해 덧셈 뺄셈을 한다

그 외 풀이

1) 제곱근 사용

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;
}
  • 제곱근이 정수이면 약수의 개수가 홀수다  !!
  • i의 제곱근을 Number.isInterger 사용하여 주어진 값이 정수인지 판별한다