문제
- 숫자의 범위가 주어질 때 그 숫자와, 그 숫자의 제곱수가 모두 팰린드롬인 수의 개수 구하기
나의 풀이
- 숫자의 범위까지 하나씩 탐색하면서 그 숫자가 팰린드롬일 경우 그 숫자의 제곱수 또한 팰린드롬인지 체크한 후, 팰린드롬인 경우 카운트
코드
import math
n = int(input())
for tc in range(n):
a,b = map(int,input().split())
cnt = 0
for i in range(a, b + 1):
# 두 자리수 넘을 때 앞 뒤 팰린드롬인지 확인
str_i = str(i)
palindrome = True
str_len = len(str_i)
if str_len == 1:
palindrome = True
elif str_len >= 2:
for j in range(str_len // 2):
if str_i[j] != str_i[str_len - j - 1]:
palindrome = False
break
# 제곱수도 팰린드롬인지 검사
check = True
if palindrome:
pal_str = math.sqrt(i)
if int(pal_str) == pal_str:
pal_str = str(int(pal_str))
if len(pal_str) == 1:
check = True
elif len(pal_str) >= 2:
for j in range(len(pal_str) // 2):
if pal_str[j] != pal_str[len(str(int(pal_str))) - j - 1]:
check = False
break
else:
check = False
if palindrome and check:
cnt += 1
print(f'#{tc + 1}', cnt)
다른 사람의 풀이
- 숫자 범위를 모두 탐색하면서 제곱수가 정수인 경우 골라내기
- 제곱수가 정수인 경우 문자열을 뒤집어 뒤집지 않은 문자열과 같은지 확인 -> 간단하게 팰린드롬 확인 가능
- 제곱하지 않은 문자열이 팰린드롬인 경우, 제곱 한 수 또한 팰린드롬인지 체크하고 모두 팰린드롬이 맞다면 카운트
코드
import math
n = int(input())
for tc in range(n):
a,b = map(int,input().split())
cnt = 0
for i in range(a, b + 1):
c = math.sqrt(i)
if c == int(c):
i = str(i)
c = str(int(c))
if i == i[::-1] and c == c[::-1]:
cnt += 1
print(f'#{tc + 1}',cnt)