[프로그래머스][C++] 정수 제곱근 판별
정수 제곱근 판별
문제 링크
분석
n
의 제곱근을 구하고, 그 제곱근이 양의 정수로 된 n
의 제곱근인지 확인하고, 그 제곱근에 +1
을 한 후 제곱을 해주는 문제입니다.
제곱근을 구하는 방법은 cmath
의 sqrt
함수를 사용해서 구할 수 있습니다.
이때 정수로 딱 나눠지지 않는 경우 소수부를 포함해서 나옵니다.
문제는 정수로 된 n
의 제곱근만 제곱해주므로 주의가 필요합니다.
풀이
#include <cmath>
long long solution(long long n) {
long long answer;
long long root = sqrt(n);
if (root * root == n)
{
answer = pow(root + 1, 2);
}
else
{
answer = -1;
}
return answer;
}
root
변수는 int
일 경우 n
의 제곱근을 모두 표현할 수 없으므로 long long
을 사용합니다.
if (root * root == n)
의 경우 sqrt(n)
의 값이 양의 정수로 된 제곱근 값이 아닐 경우를 확인하는 코드입니다.
root
자료형은 정수만 저장하는 자료형이므로 양의 정수로 된 제곱근 값이 아닐 경우 root
를 제곱한다면 n
의 값과 달라집니다.
pow
함수는 거듭제곱을 해주는 함수입니다.
해당 코드의 경우 root + 1
을 2제곱 해줍니다.
(root + 1) * (root + 1)
처럼 해주는게 성능상 더 유리할 수 있습니다.
성능 요약
테스트 1 〉 통과 (0.01ms, 4.45MB)
테스트 2 〉 통과 (0.01ms, 4.21MB)
테스트 3 〉 통과 (0.01ms, 4.21MB)
테스트 4 〉 통과 (0.01ms, 4.02MB)
테스트 5 〉 통과 (0.01ms, 4.14MB)
테스트 6 〉 통과 (0.01ms, 4.21MB)
테스트 7 〉 통과 (0.01ms, 4.18MB)
테스트 8 〉 통과 (0.01ms, 4.2MB)
테스트 9 〉 통과 (0.01ms, 3.64MB)
테스트 10 〉 통과 (0.01ms, 4.14MB)
테스트 11 〉 통과 (0.01ms, 4.21MB)
테스트 12 〉 통과 (0.01ms, 4.15MB)
테스트 13 〉 통과 (0.01ms, 3.69MB)
테스트 14 〉 통과 (0.01ms, 3.68MB)
테스트 15 〉 통과 (0.01ms, 3.63MB)
테스트 16 〉 통과 (0.01ms, 4.17MB)
테스트 17 〉 통과 (0.01ms, 4.14MB)
테스트 18 〉 통과 (0.01ms, 4.21MB)
댓글남기기