문제
정수 제곱근 판별 : 문제 링크
문제 분석
- 임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 한다. n이 양의 정수 x의 제곱이라면 x + 1의 제곱을 return 하고, n이 양의 정수 x의 제곱이 아니라면 -1을 return
- 제한 사항
- n은 1이상, 50,000,000,000,000이하인 자연수이다.
- 양의 정수 x의 값을 저장할 long long형 변수 answer을 1로 초기화. while loop의 조건문을 answer * answer <= n로 설정하여 n이하의 제곱근을 찾을때까지 반복. if문을 통해 answer의 제곱이 n과 같다면 answer + 1의 제곱을 return 하고, 아니라면 answer을 1씩 늘리고 계속 반복. loop를 탈출 했다면 제곱수가 아님을 뜻하므로 -1을 return
풀이
using namespace std;
long long solution(long long n) {
long long answer = 1;
while(answer * answer <= n) {
if(answer * answer == n) return (answer + 1) * (answer + 1);
answer++;
}
return -1;
}