개발Story
article thumbnail

소요시간 : 10분

문제

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


제한사항

  • 1 ≤ left  right ≤ 1,000

해석 

주어진 left, right를 기준으로 for문을 돌린 후 약수의 갯수를 판별해 +, -를 해주면 되는 간단한 문제이다.

 

key point는 약수의 갯수를 어떻게 구할지 정하는 것 같다.

 

풀이

function solution(left, right) {
    var answer = 0;
    for(let i = left; i<=right; i++){
        getDivisors(i) %2 == 0 ? answer+=i : answer-=i
    }
    return answer;
}
const getDivisors = (num) => { 
    const divisors = []; 
    for(let i = 1 ; i <= Math.sqrt(num) ; i++){
     if(num % i === 0) {
        divisors.push(i); if(num / i != i) 
        divisors.push(num / i); 
     } 
    } 
    // divisors.sort((a, b) => a - b); 
    return divisors.length; 
}

복기

약수의 갯수를 구하는게 포인트 같은데 나는 함수를 사용했다.

 

다른 분의 풀이를 보니

Number.isInteger(Math.sqrt(i))

아래와 같이 조건식을 두었다.

 

제곱근이 정수이면 약수의 갯수가 홀수라고 한다.

 

이걸 어케아누ㅋㅋ

profile

개발Story

@슬래기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!