[programmers] 두 원 사이의 정수 쌍

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;
    }
}

© 2023 Lee. All rights reserved.