507-perfect-number-0905

몇월며칠·2022년 9월 5일

Leetcode

목록 보기
16/19

수학을 좀만 더 잘했다면 풀 수도 있었을텐데...🥲

const checkPerfectNumber = function (num) {
  if (num === 1) {
    return false;
  }
  let sum = 1;
  for (let i = 2; i <= Math.floor(Math.sqrt(num)); i++) {
    if (num % i === 0) {
      sum = sum + i + num / i;
      if (sum > num) {
        return false;
      }
    }
  }
  return sum === num;
};
  1. num === 1 이면 바로 false를 리턴

  2. 제외한 나머지 숫자들은 전부 1로 나눠지기 때문에 sum을 1부터 시작

  3. 2부터 num을 루트로 나눠서 정수로 만든 값까지만 구하면 됨

  4. num을 i로 나누었을 때 나머지가 없다면 sum은 기존의 sum + i + num/i

  5. 반복문을 돌렸을 때 이미 sum이 num보다 커지는 경우는 false 리턴

  6. 반복문이 전부 돌아간 다음에 sum === num이라면 true 리턴

profile
What day is it today?

0개의 댓글