본문 바로가기
컴퓨터/알고리즘

[SWEA] 10570. 제곱 팰린드롬 수

by IT황구 2021. 2. 16.
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
반응형