나르시시스트 수(Narcissistic Number)란?
나르시시스트 수(자화수라고도 불림)는 주어진 진법 b에서, 각 자릿수를 자릿수의 개수만큼 거듭제곱한 값들을 모두 더했을 때 원래의 수와 같아지는 수를 의미합니다.
예를 들어 다음과 같습니다.
153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153
마찬가지로 한 자릿수인 경우도 확인할 수 있습니다.
1 = 1^1 = 1
해결 접근 방법
먼저 while 루프를 사용하여 숫자의 자릿수 개수를 셉니다. 그다음 또 다른 while 루프를 돌면서 숫자의 마지막 자릿수를 하나씩 추출하고, 해당 자릿수를 자릿수 개수(count)만큼 거듭제곱한 값을 sum 변수에 누적합니다.
루프가 모두 끝나면 sum이 원래 숫자와 일치하는지 비교한 불리언(Boolean) 값을 반환합니다.
이 접근 방식을 구현한 코드는 다음과 같습니다.
코드 예시
const isNarcissistic = (num) => {
let m = 1, count = 0;
while(num / m > 1){
m *= 10;
count++;
};
let sum = 0, temp = num;
while(temp){
sum += Math.pow(temp % 10, count);
temp = Math.floor(temp / 10);
};
return sum === num;
};
console.log(isNarcissistic(153));
console.log(isNarcissistic(1634));
console.log(isNarcissistic(1433));
console.log(isNarcissistic(342));실행 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
true true false false
153과 1634는 각 자릿수를 세 번째, 네 번째 거듭제곱하여 더하면 원래 수와 같아지므로 true가 반환되고, 1433과 342는 조건을 만족하지 않으므로 false가 반환됩니다.