
문제 설명
- 자연수
N
을 제곱한 값이 XXXN
모양인지 판별하는 문제입니다.
- N의 자릿수는 정해져 있지 않습니다.
XXX
는 임의의 숫자 입니다. XXX의 자릿수 역시 정해져 있지 않습니다.
접근법
- N을 제곱해야 합니다. 파이썬에서 제곱은
**2
입니다. (N = N*N
도 제곱입니다)
- 제곱수의 마지막 len(N)자리 숫자만 가져와야 합니다.
- 파이썬의 slicing은
음수
를 지원합니다. char[-1]은 해당 l문자의 마지막 값을 가져옵니다.
- char[-k:]를 통해 뒤에서 k개의 문자를 가져올 수 있습니다.
정답
N = int(input())
for _ in range(N):
num = int(input())
k = len(str(num))
if str(num**2)[-k:] == str(num):
print("YES")
else:
print("NO")
기타
- 처음에
제곱수의 맨 뒷자리
가 마지막 한 자리를 의미한다고 잘못 생각함
- 76의 제곱수를 판별할 때 57
76
이 아니라 5776
이면 된다고 오해함
- 특정 위치의 숫자가 동일한 지를 비교할 때는 문자열로 변환하면 편리함
- 자기복제수가 기준이 뭘까 궁금해짐
- 1에서 50,000,000사이의 자기복제수를 구해봄
- [1, 5, 6, 25, 76, 376, 625, 9376, 90625, 109376, 890625, 2890625, 7109376, 12890625]
- 1을 제외한 자기복제수는
25
와 76
꼴에서만 나타남
- 자기복제수(X)는 다음과 같이 표현할 수도 있음
- k가 X의 자릿수(k = len(str(X)), N이 자연수라 할 때 자기복제수 X는 다음이 성립함. X2=X+N∗10k
- 이게 특별한 의미나 규칙을 설명하는지는 잘 모르겠음
- 50,000,000까지의 자기복제수를 봤을 때 수식으로 표현되는 규칙은 없어보임