약수의 개수와 덧셈

RyuIsangGo🤘·2023년 8월 21일
0

문제


나의코드

const numberOfDivisors = (x) => {
   return Array(x).fill(1).map((x, i) => x+i).filter((number) => x % number === 0).length;
}

const solution = (left, right) => {
    let answer = 0;
    for(let i =left; i<= right; i++) {
        numberOfDivisors(i) % 2 === 0 ? answer += i : answer -= i;
    }
    return answer;
}

로직흐름

numberOfDivisors 함수는 약수의 개수를 반환해주는 함수이다.
이 함수는 1부터 매개변수 x까지 배열을 만들고 각각의 요소에 1,2,3...,x로 채운 뒤, 이 배열을 순회하여 x의 약수인 것만 남기고 이 남은 요소의 개수를 반환하는 함수이다.

left부터 right까지 순회하여 numberOfDivisors를 호출하고 그 값이 짝수이면 더해주고 홀수라면 빼준다.

다른 풀이법도 있었는데,
정수의 제곱근이 정수라면, 약수의 개수가 홀수이다.
이것을 이용하면 시간 복잡도 측면에서 훨씬 좋은 코드가 나온다.

profile
이전 블로그 입니다.

0개의 댓글