브루트포스 문제이다.
가장 작은 생성자를 찾는 문제여서 i는 0부터 올라가는 for문 형태로 작성했다.
input과 temp(i+i를 쪼갠 것들의 합)이 같아지면 그것이 가장 작은 생성자일테니까 temp를 result에 넣고 for문을 중단시킨다.
i가 계속 커져서 input과 같아진 경우는 생성자가 없는 경우이기 때문에 result에 0을 넣는다.
// 백준 2231 분해합
const fs = require('fs');
const input = fs.readFileSync("input.txt").toString();
let result = input;
for (let i=0; i<=input; i++) {
let seperate = String(i).split('');
let temp = parseInt(i, 10);
for (let j=0; j<seperate.length; j++) {
temp += parseInt(seperate[j], 10);
}
if (input == temp) {
result = i;
break;
}
if (i == input) result = 0;
}
console.log(result);
예전에 python으로 풀었을 땐 이렇게 풀었는데 이번에 다시 풀어보려고 하니까 input에서 작아지는 for문을 작성해서 잘 안 풀렸다.
만약에 작아지는 경우로 작성하면 생성자가 없는 경우 i가 0이 될 때까지 for문을 돌려야하기 때문에 너무 비효율적인 것이었다.