[프로그래머스 JavaScript] 약수의 개수와 덧셈 (이중for문에서 배열 초기화 위치)

옹잉·2023년 12월 14일

문제


막혔던 점

처음에는 x배열을 반복문 밖에서 초기화했었다.

function solution(left, right) {
    let answer = 0;
    let x = [];
    for(let i = left; i <= right; i++) {
        for(let j = 1; j <= i; j++) {
            if(i%j === 0) x.push(j)
        }
        answer += x.length%2 === 0? i : -i;
    }
    return answer;
}

첫 번째 숫자부터 마지막 숫자까지의 약수가 x 배열에 모두 추가돼 약수의 개수를 알기 어려웠다.
이를 해결하기 위해 x배열 초기화를 첫번째 for문 안쪽으로 옮겼다.
각 숫자마다 x배열이 초기화되고 그 숫자의 약수가 x배열에 추가되는 코드로 수정했다.

풀이

function solution(left, right) {
    let answer = 0;
    for(let i = left; i <= right; i++) {
         let x = [];
        for(let j = 1; j <= i; j++) {
            if(i%j === 0) x.push(j)
        }
        answer += x.length%2 === 0? i : -i;
    }
    return answer;
}

다른 사람 풀이
(제곱근이 정수면 약수의 개수가 홀수다)

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;
}
profile
틀리더라도 🌸🌈🌷예쁘게 지적해주세요💕❣️

0개의 댓글