없음
10,000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 증가하는 순서로 출력한다.
1
3
5
7
9
20
31
42
53
64
|
| <-- a lot more numbers
|
9903
9914
9925
9927
9938
9949
9960
9971
9982
9993
각 자리수를 나눗셈과 나머지 연산을 통해 구한다.
false가 10000개인 배열을 만들고, for문을 돌면서 숫자와 각 자리수의 합(d(n))과 같은 번째인 배열 요소(arr[d(i)-1])를 true로 만들어 준다. 이 과정으로 셀프넘버인지 아닌지로 이루어진 배열이 만들어지면, 다시 for문을 돌면서 값이 false인 요소(셀프넘버)만 출력해준다.
function d(n){
let sum=n;
let temp=sum;
while(temp>0){
sum+=temp%10;
temp=parseInt(temp/10);
}
return sum;
}
const N=10000;
const arr=new Array(N).fill(false);
for(let i=1;i<=N;i++){
arr[d(i)-1]=true;
}
for(let i=0;i<N;i++){
!arr[i]&&console.log(i+1);
}
각 자리수를 문자열 split('') 방법으로 만들고 reduce로 합을 구한다.
빈 배열을 만들고 거기에 결과값을 넣어 join('\n'
)으로 한번에 출력.
let temp = [];
let result = [];
for(let i = 1; i <= 10000; i++) {
temp.push(i + i.toString().split('').reduce((prev, curr)=> prev + parseInt(curr), 0));
}
for(let i = 1; i <= 10000; i++) {
if(temp.indexOf(i) === -1){
result.push(i);
}
}
console.log(result.join('\n'));
총합(sum)과 임시 값(temp)을 넣을 변수를 만들고 while로 temp의 일의 자리를 구하고 이를 sum에 더해준 후 temp을 parseInt(temp/10)으로 일의 자리를 빼준다. (ex. 4321=>432) 이런식으로 temp가 일의 자리일 때까지 반복해준다. (ex. temp: 4321=>432=>43=>4)
new Array(N).fill(어떤 값)
new Array(N)
: undefined가 N개인 배열을 생성함arr.fill(value[, start[, end]])
: 배열의 특정 구간을 특정 값으로 채움Array.from({length:N},()=>어떤 값)
indexOf() 메서드는 배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환하고 존재하지 않으면 -1을 반환한다.
https://dpsc615.tistory.com/40
https://www.acmicpc.net/source/2856026