[프로그래머스] 약수의 합

호떡집사·2023년 4월 17일

프로그래머스

목록 보기
1/2
post-thumbnail

문제

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.

제한사항

n은 0이상 3000이하인 정수입니다.

입출력예

n = 12 => return 28
n = 6 => return 6

나의 풀이

  • 약수 : 어떤 수를 나누어떨어지게 하는 수

  • 주어진 숫자의 모든 약수를 구해 더해주는 값으로
    % 연산자와 while 반복문 그리고 reduce를 사용하기로 했다.

나머지가 0인 숫자를 배열에 담는다
해당 배열의 누적 합을 return한다

const solution = (n) => {
    let answer= [];
    let check =1;
    while (check <= n) {

        if(n % check === 0) answer.push(check);
        check ++;
    }
    return answer.reduce((arr,cur) => arr+cur,0) ;
}

주의할점

제출 후 런타임 에러 관련 오류

-n이 0일 경우 빈 배열을 전달하게 되므로 reduce사용 시 initialValue를 0으로 설정해주자

callback의 최초 호출에서 첫 번째 인수에 제공하는 값. 

초기값을 제공하지 않으면 배열의 첫 번째 요소를 사용합니다.
빈 배열에서 초기값 없이 reduce()를 호출하면 오류가 발생하는 점 참고.

mdn reduce() 문서 바로가기

다른방법 풀이

  • 굳이 빈 배열 및 나눌 수에 대한 변수 선언없이 푸는 것이 더 깔끔해보인다.

const solution = (n) => {
  let sum = 0;
    for (let i = 1; i <= num; i++) {
        if (num % i === 0) sum += i
    }
    return sum
}
profile
성장하는 Front-End 개발자를 목표로!(✿◡‿◡)

0개의 댓글