SumPrimes
- 문제: 주어지는 숫자보다 작거나 같은 소수들을 모두 더한 값을 리턴하라
내가 푼 답
function sumPrimes(num) { var result = 0; function isPrime(n) { for(var i = 2; i < n ; i++) { if(n % i === 0) { return false; } } return true; } for(var j = 2 ; j <= num ; j++) { if(isPrime(j)) { result += j; } } return result; }
Advanced Solution
function sumPrimes(num) { let arr = Array.from({length: num+1}, (v,k) => k).slice(2); let onlyPrimes = arr.filter(n => { let m = n-1; while(m > 1 && m >= Math.sqrt(n)) { if(n % m === 0) { return false; m--; } return true; } }) return onlyPrimes.reduce((a,b) => a+b); }
이런 솔루션도 있다. (참고)
Array.from은 반복 가능한 객체나 배열과 유사한 객체 등을 얕게 카피해주는 메소드라고 한다. 두 번째 패러미터로는 map함수를 갖는다. 그런데 위에 쓰인 Array.from은, 0부터 연속한 숫자로 배열을 만들어 주는 내용이었다. 솔직히 특히 함수 부분이 잘 이해는 안되지만… 그렇다고 한다.