*모든 풀이 코드는 직접 작성하였습니다.
문제
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 한다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고,
n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성할 것.
문제 풀이
문제가 요구하는 것을 다른 표현으로 말하면, n의 제곱근(루트)이 양의 정수인가? 이다.
제곱근을 판별할려면 Math 클래스를 사용하면 편하다.
Math.sqrt() 메소드로 n의 제곱근을 구한 뒤, 이것이 정수인지 판별하면 된다.
단, double 타입의 제곱근 sqrt와 int 타입의 sqrt.intValue()는 정밀도의 차이를 생각해서 강제 타입 변환(캐스팅)을 해 줘야 한다.
풀이 코드
class Solution {
public long solution(long n) {
double sqrt = Math.sqrt(n); // n의 제곱근을 담은 double 타입의 sqrt 변수 선언
if(sqrt == (int)sqrt){ //sqrt와 sqrt를 int로 강제 타입 변환한 값이 같다면, 즉 소숫점을 가지고 있지 않다면 (= 제곱근이 양의 정수라면)
return (long)Math.pow((int)sqrt + 1, 2);
//int 타입의 (sqrt + 1)에 제곱한 값을 long 타입으로 변환하여 반환
}
else return -1; // sqrt가 소숫점을 가지고 있다면 (= 제곱근이 정수가 아니라면) -1 반환
}
}
'Coding Test' 카테고리의 다른 글
Programmers - 콜라츠 추측 (Java) (Lv.1) (1) | 2023.12.19 |
---|---|
Programmers - 두 정수 사이의 합 (Java) (Lv.1) (0) | 2023.12.19 |
Programmers - 하샤드 수 (Java) (Lv.1) (0) | 2023.12.19 |
Programmers - 정수 내림차순으로 배치하기 (Java) (Lv.1) (0) | 2023.12.19 |
Programmers - 문자열을 정수로 바꾸기 (Java) (Lv.1) (0) | 2023.12.19 |