본문 바로가기
알고리즘

[Programmars] 약수의 합 (JavaScript)

by 프린벼르 2022. 2. 4.

약수의 합 문제

1. 나의 생각 흐름

우선 약수는 자신보다 작은 어떤 수로 나누었을 때, 나머지가 0이 되는 수를 약수라고 하니까 나눠서 나머지가 0인 값을 다 더해주는 값을 리턴하면 되겠다고 생각했다.

2. 나의 코드 정리

function solution(n) {
    let answer = 0;
    for(let i = 0; i <= n; i++){
        if(n % i === 0){answer += i;}
    }
    return answer;
}

간단하게 문제를 해결했다.

3. 다른 사람들의 코드

function solution(n) {
    var answer = 0;
    let i;
    for (i = 1; i <= Math.sqrt(n); i++){
        if (!(n%i)) {
            answer += (i+n/i);
        }
    }
    i--;
    return (i === n/i) ? answer-i : answer;
}

for문 밖에 i--;를 쓴게 인상깊었다. If 조건문에서 조건에 !를 쓴걸 보니 부정하는 표현같은데 저게 뭐가 부정되는 건지 모르곘다. 찾아봐야할 것 같은데 구글링해도 안나온다.  조건문 안에서의 조건이 부정됬다는것은 저 조건값이 true라는 것이다. 자바스크립트에서 false로 간주되는 것에는 0이 있다. true값은 false값을 제외한 모든 값이기에 아마도 저 !(n%i)가 의미하는 것은 0이 아닐때를 의미하는 것 같다.

4. 결론

if 조건문에서 조건식 안에 !를 붙이는 것 찾아보기!  왜 for문 밖에서 i--를 한건지 좀 더 생각해봐야할 것 같다.

댓글