:ledger: 문제 설명

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

:one: 제한사항

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

:two: 입출력 예

N return
12 28
5 6

:three: 입출력 예 설명

:pushpin: 3-1) 입출력 예 설명 #1

12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.

:pushpin: 3-2) 입출력 예 설명 #2

5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.

:four: 프로그래머스에서 제공한 코드

처음 프로그래머스에서 작성된 코드는 아래와 같다.

function solution(n) {
    var answer = 0;
    return answer;
}

:ledger: 문제 풀이

const solution = n => {
  let arr = [];
  for(let i = 0; i <= n; i++) {
    if(n % i === 0) arr.push(i);
  }
  return arr.reduce((a, b) => a + b ,0);
}

:one: 함수 선언

  • 화살표 함수를 사용하여 n 매개변수를 받는다.

:two: 풀이

  • 입출력 예#1 의 경우 12의 약수는 1,2,3,4,6,12며, 해당 값을 배열로 담을 변수 arr을 생성한다.
  • 반복문을 통해 n % i === 0 약수의 값을 arr.push(i)를 통해 arr 배열에 담는다.
  • 마지막으로 약수를 전부 더하기 위해 reduce메서드를 사용하여 배열을 전부 더해준 후 return 했다.

:three: 결과 반환

  • 매개변수 n에 12을 대입하면 1+2+3+4+6+12 = 28
  • 매개변수 n에 5을 대입하면 1+5 = 6

:four: 실행

  • console.log(solution(12)) 실행하면 28가 출력된다.
  • console.log(solution(5)) 실행하면 6이 출력된다.

:fire: 다른 사람의 풀이 참고

다른 사람의 풀이를 보고 내가 푼 풀이 방식이 너무 어이가 없었다.
for문에서 그냥 값을 더해주면 되는거였는데.. 굳이 배열로 담아서 다시 값을 더하다니..!
요즘 배열 메서드를 공부하다보니 뇌가 그 쪽으로 문제를 풀려고 하는 것..같.. 다음엔 문제를 잘 읽어보고 해결해봐야겠다.

// [17명] for 반복문을 사용한 풀이방식
function solution(num) {
    let sum = 0;
    for (let i = 1; i <= num; i++) {
        if (num % i === 0) sum += i
    }
    return sum
}

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges