12934. 정수 제곱근 판별
Level 1 정수 제곱근 판별
첫 번째 풀이
최대 입력이 50000000000000
이기 때문에 이 숫자의 제곱근을 최대 반복횟수(7071068
)로 정했다.
해당 숫자까지 반복하면서 두 수의 합이 n
이 되는 수가 있는지 확인한다.
1#include <bits/stdc++.h> 2using namespace std; 3 4long long solution(long long n) { 5 const int MAX = 7071068; // ceil(sqrt(50000000000000)) 6 long long ans = -1; 7 8 for(long long i=1; i<=MAX; ++i) { 9 if(i*i > n) break; 10 11 if(i*i == n) { 12 ans = (i+1)*(i+1); 13 break; 14 } 15 } 16 17 return ans; 18}
두 번째 풀이
sqrt()
함수를 사용하면 훨씬 더 간단히 풀 수 있다.
1#include <bits/stdc++.h> 2using namespace std; 3 4long long solution(long long n) { 5 long long a = sqrt(n); 6 long long ans = (a*a == n) ? (a+1)*(a+1) : -1; 7 return ans; 8}