약수의 개수와 덧셈 - 반복의 중첩

조해빈·2023년 1월 4일
0

프로그래머스

목록 보기
14/15
post-thumbnail

약수의 개수와 덧셈

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

제한사항
1 ≤ left ≤ right ≤ 1,000

입출력 예
left right result
13 17 43
24 27 52

풀이 과정

function solution(left, right, m=0, n=0) {
    for(let i=left;i<=right;i++){
        for(let l=1;l<=i;l++){
            i%l===0?n++:n;
            console.log(i,l,n);
        }
        n%2?m-=i:m+=i;
    }
    return m;
}


처음 작성했던 답안이다. i가 ++되면서 n이 같이 리셋되지 않으므로 의도와 다른 결과가 발생했다.

function solution(left, right, m=0) {
    for(let i=left;i<=right;i++){
        let n=0;
        for(let l=1;l<=i;l++){
            i%l===0?n++:n;
        }
        n%2?m-=i:m+=i;
    }
    return m;
}


i에 대한 반복이 돌기 직전 let n=0;으로 n이 리셋될 수 있도록 코드를 수정하였다.
통과하였고, 다른 분들이 어떻게 더 좋은 코드를 작성했는지 확인했다.

1

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;
}

2

function solution(left, right) {
    var answer = 0;
    for(let i = left;i <= right;i++){
        if(Math.sqrt(i)%1===0) answer -= i;
        else answer += i;
    }
    return answer;
}


아... 이렇게 세세하게 수리 산출을 할 기회가 없었다. 이런 식의 접근도 그렇고 이런 함수 역시 처음 들여다 보게 되었다. 어진씨도 감탄하고 가셨네... 나도 댓글처럼 중얼거렸다. 역시 이과...

https://codechacha.com/ko/javascript-convert-float-to-integer/

profile
JS, CSS, HTML, React etc

0개의 댓글