# 12934 정수 제곱근 판별
문제 정리
n이 x의 제곱이면 x+1의 제곱 리턴. 아니면 -1리턴
생각해보기
n이 어떤 수의 제곱인지 어떻게 알지? 인수분해?^^ 하
제곱수의 배열을 만들어서 저장해 놓은 후 일치하는지 봐야하나? 안돼.. 상한선이 너무 큼
메모이제이션 이런걸 써야하는건가?
큰 수를 작은 제곱수들로 나눠보면서 ..인수분해 하듯이 해보자
코드 쓰기
long long solution(long long n) {
long long answer = 0;
vector<long long> v = {1};
long long num = 2;
long long r = 0; // 나머지
do{
if(v.size() < num) { v.push_back(num*num); }
if(n == 1) { answer = 4; break; } else {
if (n % v[num-2] == 0){
r = n / v[num-2];
answer += num;
}
}
num++;
}while(r != 0);
return answer;
}
이렇게 하니까 메모리 초과 ^^ ㅋ
내 풀이
long long solution(long long n) {
long long answer = 0;
int num = (int)(sqrt(n));
if (num == sqrt(n)){
answer = (pow(num+1, 2));
} else {
answer = -1;
}
return answer;
}
결국 그냥 검색해서 cmath 썼다ㅠㅠ 제곱근을 int로 변환해도 같으면
n이 어떤 정수의 제곱이라는 뜻이니까.. 하 ㅠ
풀고 나서 알게된 것
long long solution(long long n) {
long long answer = 0;
long long i;
for(i=1; i*i<=n; i++);
if((i-1)*(i-1)==n)
{
answer = i*i;
}
else{
answer = -1;
}
return answer;
}
이렇게 하면 하나하나 비교해가며 풀 수 있다..! ㄷ ㄷ 이렇게 그냥 하나하나 찾아도 되는구나…;;