class Solution {
public long solution(long n) {
for(long x = 1; x*x<=n ; x++) {
if (x*x == n) {
return (x+1)*(x+1);
}
}
return -1;
}
}
정수의 제곱근을 판별하는 문제에서의 포인트
1. 오버플로우
n 의 제곱근인 x 라면 굳이 long 타입으로 선언해주어야할까?
int 로 x 를 선언해주었을 때
(int 변수) * (int 변수) 의 결과가 (int 변수) 의 범위를 초과하면 오버플로우가 발생할 수 있음.
예를 들어, int 의 최대값인 2,147,483,647 에 1을 더하면 -2,147,483,648로 변환됨
2. 필요없는 계산 줄이기
기존에 반복문의 범위를 x<=n 으로 설정을 했었다.
근데 어차피 x*x 가 n 보다 넘어간다면 더 이상 제곱근이 될 수가 없기 때문에
이를 미리 생각해서 필요없는 계산을 사전에 없애서 성능 향상을 기대해볼 수 있었을 것 같다.
'컴퓨터 프로그래밍 > 알고리즘' 카테고리의 다른 글
[알고리즘] Baekjoon Bronze 5 (0) | 2025.01.10 |
---|---|
[알고리즘] 배열 (0) | 2024.10.07 |
[알고리즘] 문자열에 쓰이는 메서드들 (0) | 2024.09.30 |
[알고리즘] [Java] String → Int 변환, Integer.parsInt(), char - '0' (0) | 2024.08.08 |
[알고리즘] [Java] 정수를 문자열로 바꾸기, 타입 변환하기 (0) | 2024.08.07 |