함수


4673번 (셀프 넘버)

function d(num) {
const numSum =
num.toString().trim().split('').map(Number).reduce((prev, cur) => prev + cur, 0);
return num + numSum;
}
let arr = [];
for (let i = 0; i <= 10000; i++) {
arr.push(d(i))
}
for (let i = 0; i <= 10000; i++) {
if(arr.indexOf(i) === -1) {
console.log(i);
}
}
  • 우선 d() 함수를 만들었다. 숫자로 다루면 10000의 자리까지 생각해서 해야하기 때문에 문자로 만든 후 배열로 쪼갠 다음 다시 숫자로 만든 후에 reduce()를 이용하여 각 자리의 숫자를 모두 더해주었다. 이러한 방법으로 만의 자리 뿐 아니라 십만 백만으로 가도 쉽게 더할 수 있었다. 이 값을 numSum이라는 변수에 넣고 인수로 받을 num과 더해주었다.
  • 빈 배열을 생성하고 거기에 0부터 10000까지(사실 계산해보면 꼭 10000까지의 숫자를 넣을 필요는 없었지만 일단 10000을 넣으면 0~10000까지의 생선된 숫자는 모두 반환받을 수 있을 것이라 생각했다.)의 숫자를 이용해 생성된 숫자들을 push()를 이용하여 담았다.
  • 다시 한번 for문을 통해 0부터 10000까지의 숫자 중 indexOf를 이용해 해당 배열에 포함되지 않은 숫자를 출력했다.