[Programmers]약수의 개수와 덧셈

sunriseGong·2021년 11월 2일
0

문제

https://programmers.co.kr/learn/courses/30/lessons/77884


나의 풀이

  1. 변수 answer를 만든다.
  2. left 값부터 right 값까지 순회하는 for 문을 만든다.
  3. i 의 약수의 개수를 구한다.
  4. 약수가 짝수라면 변수 answer에 더한다.
  5. 약수가 홀수라면 변수 answer 에서 뺀다.
function solution(left, right) {
    let answer = 0;

    for (let i = left; i <= right; i++) {
        
        // 약수의 개수를 구한다.
        let num = 1;
        for (let j = 1; j <= i / 2; j++) {
            if (i % j === 0) num += 1 
        }
        // 약수의 개수가 짝이면 더하고 홀이면 뺀다
        num % 2 ? answer -= i : answer += i
    }

    return answer;
}

다른 사람 풀이

제곱근이 정수인 경우 약수의 개수가 홀수 라는 것을 이용

ex)
4의 제곱근은 2 이고 따라서 약수의 개수는 홀수(1,2,4)
5의 제곱근은 2.236... 따라서 약수의 개수는 짝수(1,5)

Number.isInteger() : 정수인가 아닌가를 판단하는 메서드

Math.sqrt() : 제곱근을 구하는 메서드

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

    for (let i = left; i <= right; i++) {
        Number.isInteger(Math.sqrt(i)) ? answer -= i : answer += i
    }

    return answer;
}

이중 for 문을 사용하지 않아서 시간 복잡도가 획기적으로 줄음

profile
심심해야 공부하게 된다.

0개의 댓글