728x90
KDT 실무형 스프링 백엔드 엔지니어 양성과정 6기 | Algorithm CODEKATA
√ 정수 제곱근 판별
🏷 관련 주제 : 제곱근 long Math.pow()
문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수x의 제곱인지 아닌지 판단하려 합니다.n이 양의 정수x의 제곱이라면x +1 의 제곱을 리턴하고,n이 양의 정수x의 제곱이 아니라면-1을 리턴하는 함수를 완성하세요.
제한 사항
n은1이상,50000000000000이하인 양의 정수입니다.
입출력 예
| n | return |
|---|---|
| 121 | 144 |
| 3 | -1 |
입출력 예 설명
입출력 예#1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.
입출력 예#2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.
✔ Solution with Math.sqrt()
class Solution {
public long solution(long n) {
long answer = 0;
long sqrt = (long) Math.sqrt(n);
if (sqrt * sqrt == n) {
answer = (long) Math.pow(sqrt + 1, 2);
} else {
answer = -1;
}
return answer;
}
}
채점 결과

💥 오늘 만난 문제 & 나의 시도 💦 & 해결 방법 👍
📌 오늘 만난 문제 : 매개변수로 받은 양의 정수 n이 양의 정수 x의 제곱이라면 x + 1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
1. 반환할 값을 담을 long 타입 변수 answer 초기화
long answer = 0;
2. 매개변수로 받은 양의 정수 n의 제곱근을 구한 후, long 타입으로 변환하여 long sqrt에 할당하자.
n의 제곱근을 long 타입으로 변환하면 소숫점 아래 자리는 버림을 한다.
long sqrt = (long) Math.sqrt(n);
- 만약
n이 제곱수이면,sqrt를 다시 제곱을 하면n이 나옴.(
Math.sqrt(n)을 long 타입으로 변환할 때, 버림되는 값이 없으므로) - 만약
n이 제곱수가 아니면,sqrt를 다시 제곱을 하면n보다 작은 값이 나옴.
3. `sqrt`의 제곱과
n을 비교하여n이 제곱수 이면sqrt + 1의 제곱을 반환할 값으로 할당하고 그렇지 않으면-1을 반환할 값으로 할당하자.if (sqrt * sqrt == n) { answer = (long) Math.pow(sqrt + 1, 2); } else { answer = -1; }
4. answer에 할당된 값을 반환하자.
return answer;
💬 무엇을 새롭게 알았는지
long 타입을 별로 사용해 보지 못했는데 long 타입 변수 사용 및 계산을 해 볼 수 있었고
Math.sqrt() 메서드를 사용해 보았다.
📚 References(참고 자료)
728x90