http://codingdojang.com/scode/539?answer_mode=hide
var assert = require('assert')
/**
* 자기 자신을 제외한 모든 양의 약수들의 합이 자기 자신이 되는 자연수를 완전수라고 한다.
* 예를 들면, 6과 28은 완전수이다. 6 = 1 + 2 + 3 // 1, 2, 3은 6의 약수
* 28 = 1 + 2 + 4 + 7 + 14 // 1, 2, 4, 7, 14는 각각 28의 약수
*
* 입력으로 자연수 N을 받고, 출력으로 N이하의 모든 완전수를 출력하는 코드를 작성하라.
*/
function divisorWithoutSelf(n) {
var divisors = []
for (var i = 1; i < n; i++) {
if (n % i === 0) {
divisors.push(i)
}
}
return divisors
}
function sumOfList(list) {
return list.reduce((a, b) => (a + b), 0)
}
function isPerfectNumber(n) {
return n === sumOfList(divisorWithoutSelf(n))
}
function perfectNumbers(n) {
var numbers = []
for (var i = 2; i <= n; i++) {
if (isPerfectNumber(i)) {
numbers.push(i)
}
}
return numbers
}
describe('get perfect numbers', () => {
it('divisors without self', () => {
assert.deepEqual(divisorWithoutSelf(6), [1, 2, 3])
})
it('sum of list', () => {
assert.equal(sumOfList([1, 2, 3]), 6)
})
it('is perfect number', () => {
assert.equal(isPerfectNumber(6), true)
})
it('perfect numbers', () => {
assert.deepEqual(perfectNumbers(500), [6, 28, 496])
})
})
'coding' 카테고리의 다른 글
에잇퍼센트 면접 문제 (0) | 2017.02.03 |
---|