
https://leetcode.com/problems/valid-perfect-square/description/
양의 정수 num이 주어지면, 완전제곱근이면 true, 아니면 false를 반환합니다. 예를 들어 16은 4로 나눠 떨어져 완전제곱근이고, 14는 3.742로 나눠떨어져 아닙니다.
코드 자체는 GPT의 도움을 받았다. 왜냐하면 자바로 sqrt를 쓰지 않고 표현할 방도가 생각이 안났습니다.
num자체를 2로 나눈 값과 나눈 값을 곱한 값을 비교해가면서 진행됩니다. 완전 제곱근이 아니면 같은 수가 나올 수 없습니다.
import java.util.Scanner;
public class Main_L367 {
public static boolean isPerfectSquare(int num) {
if (num < 0) return false; // 음수 false 처리
int left = 0;
int right = num;
while (left <= right) {
int mid = left + (right - left) / 2; // 중간값 계산 (오버플로우 방지)
long square = (long) mid * mid; // 제곱 계산 (오버플로우 방지 long)
if (square == num) {
return true; // mid * mid == num -> 완전 제곱수(곱해서 떨어짐)
}
else if (square < num) {
left = mid + 1; // 제곱이 실제 수보다 작다 -> 더 큰 수로 올린다.
}
else {
right = mid - 1; // 제곱이 실제 수보다 크다 -> 더 작은 수로 줄인다.
}
}
return false; // 그외의 경우 false
}
// 입력단
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println(isPerfectSquare(n));
}
}