aotoyae

[JS] 백준 : 약수들의 합 9506 본문

Coding Test

[JS] 백준 : 약수들의 합 9506

aotoyae 2023. 10. 2. 03:33

 


https://www.acmicpc.net/problem/9506

 

9506번: 약수들의 합

어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다. 예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다. n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.

www.acmicpc.net

const input = require("fs")
  .readFileSync("dev/stdin")
  .toString()
  .trim()
  .split("\n");

for (i = 0; i < input.length - 1; i++) {
  let num = Number(input[i]);
  let numArr = [];
  let index = 1;
  let numAll = 0;

  while (index < num) { // 마지막 수 제외하려면 index가 num보다 작아야함
    if (num % index === 0) numArr.push(index); // 약수면 numArr에 추가
    index++;
    numAll = numArr.reduce((a, b) => a + b); // numArr 배열의 합
  }
  // console.log(numAll); // 6 16 28
  // console.log(index); // 6 12 28
  // console.log(numArr); // [1, 2, 3] [1, 2, 3, 4, 6] [ 1, 2, 4, 7, 14]
  const str = numArr.join(" + "); // 배열 사이를 " + "로 합치면서 string으로 변환
  if (num === numAll) {
    console.log(`${num} = ${str}`);
  } else {
    console.log(`${num} is NOT perfect.`);
  }
}