문제 설명

제한 사항

입출력 예

풀이
class Solution {
public long solution(long n) {
double temp = Math.sqrt(n);
return (temp - Math.floor(temp) < 1e-14) ? (long) Math.pow(temp + 1, 2) : -1;
}
}
후기
솔직히 아직도 큰 수의 실수 연산을 하기가 두렵다. 아직 정확히 어떻게 처리해야 할 지 모르겠다. 이 문제도 BigDecimal로 풀어야 하나 고민했는데 연산 범위가 double의 범위 내길래 그냥 double로 풀었다. 어차피 주어지는 수보다 더 커질 일도 없고, 계산 결과가 딱 나누어 떨어지면 double의 정밀도 최대 16자리(정확한 값을 보증하는 건 15자리까지라고 알고 있다.) 내기 때문이다.그런데 어차피 double의 정밀도 내라면 그냥 0과 같으면 참이고 아니면 거짓인 걸로 해도 됐을 것 같다.
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
| [프로그래머스][JAVA][Lv. 2] 영어 끝말잇기 (0) | 2023.08.08 |
|---|---|
| [프로그래머스][JAVA][Lv. 1] 정수 내림차순으로 배치하기 (0) | 2023.08.08 |
| [프로그래머스][JAVA][Lv. 1] 제일 작은 수 제거하기 (0) | 2023.08.07 |
| [프로그래머스][JAVA][Lv. 1] 짝수와 홀수 (0) | 2023.08.07 |
| [프로그래머스][JAVA][Lv. 2] 카펫 (0) | 2023.08.07 |