컴퓨터/알고리즘
[SWEA] 10570. 제곱 팰린드롬 수
IT황구
2021. 2. 16. 13:00
728x90
반응형
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXO72aaqPrcDFAXS
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
#include<cstdio>
#include<cmath>
typedef long long ll;
using namespace std;
int check_pal(int num)//맞으면 1, 아니면 0리턴
{
if( num / 10 == 0)
return 1;
else if(num / 10 < 10)
{
if(num % 10 == num / 10)
return 1;
}else{
if(num / 100 == num % 10)
return 1;
}
return 0;
}
int main(void)
{
int size;
int s,e;
int cnt;
double sq;
scanf("%d",&size);
for(int i = 0; i < size; i++)
{
scanf("%d %d",&s,&e);
cnt = 0;
for(int i = s; i <= e; i++)
{
if(check_pal(i)){
sq = sqrt(i);
if(sq - (int)sq == 0){ //정수면
if(check_pal(sq)) {
cnt++;
}
}
}
}
printf("#%d %d\n",i+1,cnt);
}
return 0;
}
왜 올렸는가?
저번에 다트게임때 바로 생각 못했던 정수인가? 를 체크하는걸 이용했기 때문이다.
지난번에 한 경험으로 보자마자 떠올려서 샥샥샥 풀었다.
A가 팰린드롬인가 체크.
팰린드롬이면 sqrt(A)가 정수인가? 체크
sqrt(A)가 정수면 팰린드롬인가? 체크
맞으면 cnt++
숫자가 커질경우 어떻게 할것인가? 생각해봤는데..
1000,10000의 자리의 경우
맨앞 맨뒤, 그다음앞 그다음뒤 만 체크하면 되고
100000, 1000000의 경우도
비교하는게 1개씩만 더 늘기때문에
이것만 변수화 해주면 될 듯 하다.
===END====
728x90
반응형