euisblue
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}