[programmers] 두 원 사이의 정수 쌍
in Algorithm on Algorithm
https://school.programmers.co.kr/learn/courses/30/lessons/181187
“두 점 사이 거리”는 피타고라스 정리로 구한다.
어떤 점 (x, y)가 원의 중심 (a, b)로부터 거리 r만큼 떨어져 있다면
√((x - a)² + (y - b)²) = r
양변 제곱하면:
(x - a)² + (y - b)² = r²
중심이 (0,0)일 경우
x² + y² = r²
거리 제곱 = 반지름 제곱
class Solution {
public long solution(int r1, int r2) {
long answer = 0;
for (int x = 1; x <= r2; x++) {
// 큰 원에서 가능한 y 최대값
int maxY = (int) Math.floor(Math.sqrt((long) r2 * r2 - (long) x * x));
// 작은 원에서 가능한 y 최소값
int minY = (int) Math.ceil(Math.sqrt((long) r1 * r1 - (long) x * x));
answer += (maxY - minY + 1);
}
return answer * 4;
}
}