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--를 한건지 좀 더 생각해봐야할 것 같다.
'알고리즘' 카테고리의 다른 글
[Programmars] 정수 제곱근 판별 (JavaScript) (0) | 2022.02.04 |
---|---|
[Programmars] 약수의 개수와 덧셈 (JavaScript) (0) | 2022.02.04 |
[Programmars] 자릿 수 더하기 (JavaScript) (0) | 2022.02.04 |
[Programmars] x만큼 간격이 있는 n개의 숫자 (JavaScript) (0) | 2022.02.04 |
[Programmars] 하샤드 수 (JavaScript) (1) | 2022.02.03 |
댓글