알고리즘

[Lv_2] 두 원 사이의 정수 쌍

빅디 2023. 8. 24. 01:21
728x90

문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/181187

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

class Solution {
    public long solution(int r1, int r2) {
        long answer = 0;
        // 그래프의 양인 부분에서 조건에 일치하는 점의 개수를 구하고 거기에 4를 곱한 값이 정답
        for (long i = 1; i <= r2; i++) {
            // r2 * r2식으로 제곱처리 방법을 (long) Math.pow(r2, 2)과 같이 처리해 오버플로우 방지중요
            double maxY = Math.sqrt((long) Math.pow(r2, 2) - (long) Math.pow(i, 2));
            double minY = Math.sqrt((long) Math.pow(r1, 2) - (long) Math.pow(i, 2));
            long count = -1;
            
            if (Double.isNaN(minY)) {
                count = (long) Math.floor(maxY) + 1;
            } else {
                // 실수 사이에 해당하는 정수의 개수를 구하기 위해 높은 값에서는 '내림' 낮은 값에서는 '올림'처리
                count = (long) (Math.floor(maxY) - Math.ceil(minY) + 1);
            }
            answer += count;
        }
        return answer * 4;
    }
}
JAVA