Daily 코드카타

[코드카타] 코딩테스트입문 : 정수 제곱근 판별 - 2026.06.26 풀이

정이뿡뿡 2026. 7. 10. 10:27

문제 설명

 


해설 :

1. 제곱근을 구하는 마법의 도구: Math.sqrt()

자바에는 복잡한 수학 계산을 대신해 주는 Math라는 기본 클래스가 있습니다.

그중 Math.sqrt(숫자)를 사용하면 루트 값을 구해줍니다.

  • Math.sqrt(121) ➔ 11.0
  • Math.sqrt(3) ➔ 1.7320508...

 

2. 형변환 (long)과 if문의 완벽한 조화  

Math.sqrt()는 기본적으로 소수점까지 계산하는 double 타입으로 결과를 돌려줍니다.

하지만 문제에서는 "양의 정수"인지 판별하라고 했죠.

그래서 (long) Math.sqrt(n)을 써서 소수점을 강제로 잘라버립니다.

  • n이 121일 때: 11.0 ➔ long 변환 ➔ 11
  • n이 3일 때: 1.732... ➔ long 변환 ➔ 1

이제 소수점을 잘라낸 값(x)을 다시 곱해봅니다(x * x).

  • 11 * 11 == 121 ➔ 원래 값과 같으므로 정수의 제곱이 맞다! ➔ (11 + 1) * (11 + 1) = 144 리턴.
  • 1 * 1 != 3 ➔ 원래 값과 다르므로 정수의 제곱이 아니다! ➔ -1 리턴.

 

3. 왜 또 int가 아니라 long일까?

제한 사항을 보면 n이 최대 50,000,000,000,000(50조)입니다.

오버플로우 개념 기억하시죠?

int는 약 21억까지만 담을 수 있기 때문에, 이번 문제도 자릿수가 넉넉한 long 타입을 사용해야 안전하게 계산할 수 있습니다.

 

풀이한 코드🔽

더보기
class Solution {
    public long solution(long n) {
        long x= (long) Math.sqrt(n);
            if (x*x==n){
                return (x+1)*(x+1);
 }
        else {
            return -1;}
    
    }
}