문제 설명
정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
제한 사항
n은 0 이상 3000이하인 정수입니다.
어제 약수문제 풀어서 복습겸 비슷한 종류의 문제 찾아옴!
생각해본 풀이법
어제처럼 for문으로 1부터 n만큼 돌리면서 n을 나눠떨어지게 하는 숫자들끼리
더하게 만들어서 리턴하면 되겠다.
function solution(n) {
let answer = 0
for (let i = 1; i <= n; i++){
if (n % i == 0){
answer = answer + i;
}
}return answer
}
어제 고민해본 덕분에 금방 풀었다 ㅋㅋ
신기하게 구경했던 다른 사람의 코드들
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;
}
var로 선언하면 전역변수에 적용돼서 밖에 선언해도 된다니..! 신박하다
let sumDivisor = num => {
let answer = 0,
i = 1,
j = num%2 == 0 ? 1 : 2
for(i; i<num; i=i+j) if(num%i == 0) answer += i
return answer+num
}
삼항연산자 사용한 답안