1.문제
A perfect number is a positive integer that is equal to the sum of its positive divisors, excluding the number itself. A divisor of an integer x is an integer that can divide x evenly.
Given an integer n, return true if n is a perfect number, otherwise return false.
정수 n이 주어질 때 n이 perfect number인지 판별하는 문제이다. 이 때 perfect number란 자신을 제외한 공약수의 합과 자기 자신이 같은 숫자를 말한다.
Example 1
Input: num = 28
Output: true
Explanation: 28 = 1 + 2 + 4 + 7 + 14
1, 2, 4, 7, and 14 are all divisors of 28.
Example 2
Input: num = 7
Output: false
Constraints:
2.풀이
- n의 자기 자신을 제외한 최대공약수들을 구한다.
- 최대공약수들의 합과 자기자신이 같은지 체크한다.
/**
* @param {number} num
* @return {boolean}
*/
const checkPerfectNumber = function (num) {
const divisors = [];
let sum = 0;
// 자신을 제외한 공약수를 구해서 배열에 저장한다.
for (let i = 1; i <= num / 2; i++) {
if (num % i === 0) {
divisors.push(i);
}
}
// divisors 배열의 길이가 0 보다 크다면 divisors 의 요소들의 합을 구한다.
if (divisors.length > 0) {
sum = divisors.reduce((prev, next) => {
return (prev += next);
});
}
// 공약수들의 합과 num이 같다면 true 리턴
return num === sum;
};
3.결과
