https://www.acmicpc.net/problem/4673
접근
완전 탐색 문제로,0부터 10000까지 반복문을 돌리며 각 수가 셀프넘버가 됐을때 몇인지를 계산하고 배열에 push한다. 그 후 array에 포함되지 않는것들을 출력하면 되겠다.
let array = []
function selfNumber()
{
let dn;
for(let i = 0 ;i<10000;i++)
{
if(i<10)
{
dn = i*2
}
else if(i >= 10)
{
dn = i + i.toString().split('').map(item=>parseInt(item)).reduce((prev,cur)=>{
cur = parseInt(prev) + cur
return cur;
},0)
}
array.push(dn)
}
}
selfNumber()
for(let i = 1;i<=10000;i++)
{
if(!array.includes(i))
{
console.log(i)
}
}
dn = i + i.toString().split('').map(item=>parseInt(item)).reduce((prev,cur)=>{
cur = parseInt(prev) + cur
return cur;
},0)
숫자가 두자리 수 이상일때 수를 한 자리 씩 split으로 나눈 후에 reduce로 더해줘 값을 계산해주는 방식을 사용했다.
정리
모든 수를 다 완전탐색하는 방식을 사용하는게 핵심
숫자를 split하여 더하는 로직
완전탐색 방식은 복잡한 로직을 요한다기 보단 문제에서 보이는 그대로 계산해주는게 좋은 방식같아보인다.