
const fs = require('fs');
const path = process.platform === 'linux' ? '/dev/stdin' : 'Wiki\\input.txt';
const n = Number(fs.readFileSync(path));
let isTrigger = false;
for (let i = 1; i <= 1000001; i++) {
const M = i
.toString()
.split('')
.map((it) => Number(it))
.reduce((pre, cur) => pre + cur, i);
if (M === n) {
isTrigger = true;
console.log(i);
break;
}
}
if (!isTrigger) {
console.log(0);
}
⏰ 소요한 시간 : 13분
예~전에 파이썬으로 풀었던 기억이 있는데...(그때도 못풀었던 기억)
근데 이번에도 못풀어서 예전에 풀었던 파이썬 풀이 봤다.
N의 범위는 1,000,000 이고 N의 분해합은 1,000,001이니까 모든 경우의 수를 돌려주면 된다.
i를 문자열로 바꿔서 split을 해주면 배열 형태로 바뀔 것이고, 숫자로 매핑시켜 sum연산을 해준다. reduce 메서드 두번째 인자로 i를 전달해주면 손쉽게 분해합 공식을 적용할 수 있다.
구해진 M과 n을 비교해 만족한다면 반복을 멈추고 정답을 출력해주고, 아니면 0을 출력해준다.