본문 바로가기

백준/JavaScript

[JS] 백준 2231번 - 분해합

728x90

 

 

 

문제 2231번

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

 

2231번: 분해합

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이

www.acmicpc.net

 

자연수 n이 주어졌을 때, n의 가장 작은 생성자 m을 구하기 위해서 m을 0부터 n보다 작을 때까지 반복문을 돌려줘야한다.

m과 m의 각 자리수들을 더했을 때 n이 나와야하기 때문에 m을 문자열로 바꿔준다.

문자열로 바꿔 해당 문자열의 길이가 몇인지 구한다. 해당 길이만큼 반복문을 돌려 sum에 더해준다. 여기서 sum을 미리 m으로 초기화시켜줬으므로 m의 각 자리수들만 더하면 된다.

그리고 sum이 n과 같다면 해당 m이 n의 가장 작은 생성자를 나타내는 것이므로 m을 출력해주고 break를 통해 반복문을 빠져나온다. 만약 m이 n-1이 될때까지도 생성자가 없다면 0을 출력해준다.

 

const readFileSyncAdress = process.platform === 'linux' ? '/dev/stdin':'./input.txt'
const input = require("fs").readFileSync(readFileSyncAdress).toString().trim();
const n = Number(input);
for(let m=0;m<n;m++){
    let sum = m;
    let m_str = m.toString();
    let m_length = m_str.length;
    for(let i=0;i<m_length;i++){
        sum+=Number(m_str[i]);
    }
    if(sum===n){
        console.log(m);
        break;
    }
    if(m===n-1){
        console.log(0);
    }
}

 

728x90