[Bronze II] 자기복제수 - 2028
성능 요약
메모리: 1116 KB, 시간: 0 ms
분류
수학
제출 일자
2026년 04월 25일 22:04:59
문제 설명
어떤 자연수 N을 제곱했을 때, 그 제곱수의 맨 뒷자리에 원래의 수 N이 다시 나타나면, 우리는 그 수 N을 자기복제수라고 한다.
예를 들면, 5의 제곱은 52는 25이고 25의 맨 뒷자리에 원래의 수 5가 나타나므로 5는 자기복제수이다. 또 다른 예로, 76의 제곱은 5776이고 5776의 맨 뒷자리에 76이 나타나므로 76 또한 자기복제수이다.
자연수 N이 주어졌을 때, 그 수가 자기복제수인지 아닌지를 알아내는 프로그램을 작성하시오.
입력
입력의 첫 줄에는 테스트 케이스의 개수 T (1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 자연수 N (1 ≤ N ≤ 1000)이 주어진다.
출력
각 테스트 케이스에 대해, 주어진 자연수가 자기복제수이면 YES를 아니면 NO를 출력한다.
💡 해결 방법
💻 코드
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int arr[20];
int n;
int degree(int data)
{
int degree = 0; if(data / 1000 >= 1)
{
degree = 10000;
}
else if(data / 100 >= 1)
{
degree = 1000;
}
else if(data / 10 >= 1)
{
degree = 100;
}
else if(data / 1 >= 1)
{
degree = 10;
}
return degree;
}
void check(int data)
{
int a = (data*data) % degree(data);
if(a == data)
printf("YES\n");
else
printf("NO\n");
}
int main(int argc, char *argv[])
{
scanf("%d", &n);
for(int a = 0; a < n; a++)
{
scanf("%d", &arr[a]);
}
for(int a = 0; a < n; a++)
{
check(arr[a]);
}
return 0;
}