https://programmers.co.kr/learn/courses/30/lessons/12928
let n = 12;
function solution1(n) {
let answer = 0;
for(let i = 1; i<=n; i++){
if(n%i === 0){
answer+=i;
}
}
return answer;
}
console.log(solution1(n)); // 28
- for문으로 n보다 작거나 같을 경우 반복하여 실행한다.
let n = 12;
function solution2(n, answer=0, i=1) {
return i<=n ? solution2(n, n%i === 0 ? answer+i : answer, ++i) : answer;
}
console.log(solution2(n)); // 28
- 1번 문제풀이와 동일한 방법이지만 삼항연산자와 재귀함수를 활용하였다.
let n = 12;
const solution3 = (n) =>
Array.from(Array(n), (v, i) => i + 1)
.filter((num) => n % num === 0)
.reduce((acc, cur) => (acc += cur), 0)
console.log(solution3(n)); // 28
- Array.from() 메서드로 배열을 만드는데 배열의 length는 Array(n)만큼 생성한다. 또한 각각의 빈 배열 Array(n)안에 값은 (v, i) => i + 1가 되는데 v는 빈 배열 Array(n)의 각각의 요소를 가리키며 i는 Array(n) 요소 index값을 말한다. index가 1부터 시작해야하므로 index의 1을 더하여 출력한다. 쉬운 예제로는 Array.from([1, 2, 3], x => x + x) 경우 배열 요소 자체가 더해지기 때문에 출력 값이 [2, 4, 6]이 출력되고 Array.from([1, 2, 3], (v, x) => x + x) 경우 배열 요소의 index가 더해지기 떄문에 출력 값이 [0, 2, 4]가 출력된다.