[프로그래머스] 코딩테스트 연습 - 약수의 합 (javascript)

지미노·2022년 9월 6일
0

코딩테스트

목록 보기
26/40
post-thumbnail

문제 설명
정수 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
}

삼항연산자 사용한 답안

0개의 댓글