ALGORITHM/PROGRAMMERS

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

heeney 2021. 7. 3. 22:36
728x90

문제 설명

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

제한사항

  • 1 ≤ left  right ≤ 1,000

입출력 예

left right result
13 17 43
24 27 52

입출력 예 설명

입출력 예 #1

  • 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.
약수 약수의 개수
13 1, 13 2
14 1, 2, 7, 14 4
15 1, 3, 5, 15 4
16 1, 2, 4, 8, 16 5
17 1, 17 2
  • 따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.

작성한 코드

function solution(left, right) {
    var answer = 0;

    for(let i=left; i<=right; i++) {
        Math.sqrt(i) % 1 === 0 ? answer-=i : answer+=i;
    }
    
    return answer;
}
1. left 값 부터 right값까지 for문을 돌면서
2. Math.sqrt()를 이용해 해당 left값의 제곱근을 1로 나눈 나머지 값이 0이라면
// 제곱근을 1로 나눈 나머지 값이 0이면 해당 값의 약수 개수는 홀수이고 나머지값이 0이 아니라면 개수가 짝수이다.
3. (참) answer에서 해당 left값(i)을 뺄셈
4. 거짓(나머지값이 0이 아님)이라면 덧셈
5. 최종 answer 값을 return 한다.

다른 분의 좋은 코드

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;
}
제곱근이 정수라면 약수의 개수가 홀수이고, 정수가 아니라면 짝수다.

 

오늘도 이렇게 배워갑니다...^^.... 휴 세상엔 정말 똑띠한 사람들이 많다..!

728x90