블로그를 변경하였습니다.

해당 블로그는 더 이상 추가 포스팅 없을 예정입니다.

👉 새 블로그 방문하기


[Javascript] 약수의 개수 덧셈

2022. 2. 1. 16:11
728x90
반응형

문제 설명 

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

 

제한 사항)

  • 1 ≤ left  right ≤ 1,000

입출력 예 )

left right result
13 17 43
24 27 52

 

 

정답 코드

/**
 *
 * @param left: 시작
 * @param right: 마지막
 * @returns {number}
 * 약수의 개수: 짝수 -> + , 홀수 -> -
 */
function solution(left, right) {
    return divisor(number(left,right));
}

function number(left,right){
    let num = [];
    for(let i = left; i <= right; i++){
        num.push(i);
    }
    return num;
}

function divisor(arr) {
    let result = 0;
    let resultCount = [];
    // 배열에 담겨있는 수의 약수를 구한다.
    // 이때, 약수의 개수가 짝수일 경우 result 변수에 해당 배열의 수를 더하고
    //      약수의 개수가 홀수일 경우 result 변수에 해당 배열의 수를 뺀다.
    for(let i = 0; i < arr.length; i++){
        let cnt = 0;
        for(let j = 1; j <= arr[i]; j++){
            if(arr[i] % j === 0){
                cnt++;
            }
        }
        resultCount.push(cnt);
        if(resultCount.pop() % 2 === 0){
            result += arr[i];
        } else {
            result -= arr[i];
        }
    }
    return result;
}

 

그냥 숫자 배열을 따로 만들어서 처리했는데

 

하고나서 보니 굳이 저렇게 할 필요가 있을까 싶다..

 


 

다른 사람 풀이 1.

function solution2(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;
}

 

  1. Math.sqrt()

내가 작성한 풀이는 다 분리해서 사용한다고 생각해서 다 나눠놨다.

근데 이 풀이를 보고 내가 작성했던 코드는 무엇인가...라는 생각이 많이 들었다..

( 이렇게 짧아지는 코드를 내꺼는 왜이렇게 길지..?? )

 

여기서 sqrt() 함수를 처음 접했다.. 

 

 

다른 사람 풀이 2.

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

    for (let i = left; i <= right; i++) {
        let count = 0;
        for (let j = 1; j <= i; j++) {
            if (i % j === 0) count++;
        }
        if (count % 2) answer -= i;
        else answer += i;
    }

    return answer;
}

 

 

 


 

 

728x90
반응형

'CS > 알고리즘' 카테고리의 다른 글

[Javascript] 2016년  (0) 2022.02.26
[Javascript] 예산  (0) 2022.02.19
[Javascript] 3진법 뒤집기  (0) 2022.02.01
[Javascript] 실패율  (0) 2022.01.17
[Java] 오름차순, 내림차순 알고리즘  (0) 2021.09.07

BELATED ARTICLES

more