본문 바로가기

백준/JavaScript

[JS] 백준 약수, 배수와 소수 - 9506번

728x90

 

 

 

 

문제 9506번

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

 

9506번: 약수들의 합

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

www.acmicpc.net

 

맨 마지막 숫자는 pop()으로 제거해줄 수 있다. 그리고 1은 항상 약수이기 때문에 미리 약수 배열에 넣어주면 된다고 한다.

나눠지는 약수인지 확인하기 위해서는 제곱근 범위까지만 알면 되기에 Math.sqrt() 메서드로 제곱근을 구하면 된다.

reduce()로 모든 약수의 합을 구하고, 입력된 입력값과 비교해 완전수인지 판단해준다. 만약 완전수가 아니라면 어떤 숫자is NOT perfect를 출력해주면 된다고 한다.

 

const readFileSyncAdress = process.platform === 'linux' ? '/dev/stdin':'./input.txt'
const input = require("fs").readFileSync(readFileSyncAdress).toString().trim().split('\n').map(x=>Number(x));

input.pop(); //맨 끝 제거
console.log(input.map(function solution(num){
    const result = [1];
    for(let i=2;i<=Math.sqrt(num);i++){
        if(num%i===0){
            result.push(i);
            result.push(num/i); //i랑 곱했을 때 num되는 약수
        }
    }
    if(result.reduce((acc,cur)=>acc+cur,0)===num){
        return `${num} = `+result.sort((a,b)=>a-b).join(' + ');
    } else{
        return `${num} is NOT perfect.`;
    }
}).join('\n'));

 

 

힝... 이해는 가는데 나중에 다시 한번 더 풀어봐야겠다.

 

 

[참고] https://valueengine.tistory.com/23

 

728x90