문제 설명

해설 :
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;}
}
}
'Daily 코드카타' 카테고리의 다른 글
| [코드카타] 코딩테스트입문 : 정수내림차순으로 배치하 - 2026.06.29 풀이 (0) | 2026.07.10 |
|---|---|
| [코드카타] 코딩테스트입문 : 문자열을 정수로 바꾸기 - 2026.06.25 풀이 (0) | 2026.06.25 |
| [코드카타] 코딩테스트입문 : 자연수 뒤집어 배열로 만들기 - 2026.06.24 풀이 (0) | 2026.06.24 |
| [코드카타] 코딩테스트입문 : x만큼 간격이 있는 n개의 숫자- 2026.06.24 풀이 (0) | 2026.06.24 |
| [코드카타] 코딩테스트입문 : 나머지가 1이 되는 수 찾기 - 2026.06.22 풀이 (0) | 2026.06.22 |