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

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

코드

풀이 1

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

  return sum;
}

많은 사람들이 푼 방식이다. n 크기 만큼 반복문으로 약수 조건 확인하는 방식!

 

풀이 2

const solution = (n) => 
  Array.from({ length: n }, (_, i) => i + 1)
       .filter(i => n % i === 0)
       .reduce((sum, i) => sum + i, 0);

Array 메서드를 사용하여 각 단계가 무엇을 하는지 명확하게 보여주도록 변경해보았다. (ES6 문법으로 변경해본 것임..)

  • Array.from 메서드를 사용하여 1부터 n까지의 숫자가 포함된 배열을 생성
    • { length: n }: 길이가 n인 배열 생성
    • (_, i) => i + 1: 배열의 각 요소를 1부터 n까지로 초기화
  • filter 메서드를 사용하여 n의 약수 필터링
    • i => n % i === 0: n을 i로 나눈 나머지가 0인 요소만 남김
  • reduce 메서드를 사용하여 필터링된 요소의 합 계산
    • (sum, i) => sum + i, 0: 초기값을 0으로 설정하고, 배열의 요소를 하나씩 더하기