네온 숫자(Neon Number)란 어떤 수를 제곱했을 때, 그 결과값의 각 자릿수를 모두 더한 합이 원래의 수와 같아지는 수를 말합니다. 간단한 예시로 살펴보겠습니다.
n = 9
제곱값 = 81
제곱값의 자릿수 합 = 8 + 1 = 9
자릿수 합이 원래 수인 9와 같으므로, 9는 네온 숫자입니다.
참고로 10진수에서 네온 숫자는 0, 1, 9 단 세 개뿐이라는 점도 흥미롭습니다.
이번 글에서는 주어진 수가 네온 숫자인지 판별하는 프로그램을 만들어 보겠습니다. 네온 숫자라면 "Yes"를, 아니라면 "No"를 출력하면 됩니다.
알고리즘
- 판별할 수 n을 초기화합니다.
- 수 n의 제곱을 구합니다.
- 제곱값의 각 자릿수 합을 계산합니다.
- 자릿수 합이 원래 수 n과 같으면 true, 그렇지 않으면 false를 반환합니다.
C++ 구현
다음은 위 알고리즘을 C++로 구현한 코드입니다.
#include <bits/stdc++.h>
using namespace std;
int isNeonNumber(int x) {
int square = x * x;
int digitsSum = 0;
while (square != 0) {
digitsSum += (square % 10);
square = square / 10;
}
return digitsSum == x;
}
int main(void) {
string result;
result = isNeonNumber(1) ? "Yes" : "No";
cout << 1 << "->" << result << endl;
result = isNeonNumber(3) ? "Yes" : "No";
cout << 3 << "->" << result << endl;
result = isNeonNumber(9) ? "Yes" : "No";
cout << 9 << "->" << result << endl;
}코드 설명
isNeonNumber 함수는 먼저 입력받은 수의 제곱을 계산한 뒤, while 반복문을 통해 제곱값을 10으로 나눈 나머지(% 10)로 일의 자릿수를 하나씩 추출하여 더합니다. 이후 몫(/ 10)으로 다음 자릿수로 이동하며, 이 과정을 제곱값이 0이 될 때까지 반복합니다. 마지막으로 계산된 자릿수 합이 원래 수와 같은지 비교한 결과를 반환합니다.
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
1->Yes 3->No 9->Yes
1과 9는 네온 숫자이므로 "Yes"가 출력되고, 3은 제곱하면 9가 되어 자릿수 합이 3이 아니므로 "No"가 출력되는 것을 확인할 수 있습니다.