[LeetCode] Perfect Number

준규·2023년 3월 6일
0

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:

  • 1 <= num <= 10^8

2.풀이

  1. n의 자기 자신을 제외한 최대공약수들을 구한다.
  2. 최대공약수들의 합과 자기자신이 같은지 체크한다.

/**
 * @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.결과

profile
안녕하세요 :)

0개의 댓글