문제 풀이/프로그래머스

[프로그래머스] 두 원 사이의 정수 쌍(JAVA)

27200 2024. 11. 20. 17:10

문제

https://school.programmers.co.kr/learn/courses/30/lessons/181187


풀이(30분)

import java.util.*;
class Solution {
    public long solution(int r1, int r2) {
        long answer = 0;

        double powR1 = Math.pow(r1, 2);
        double powR2 = Math.pow(r2, 2);

        int onLine = (r2 - r1 + 1)*4; //선 위에 있는 좌표 개수

        for(int i=0; i<= r2; i++){ //1사분면만 계산
            double powX = Math.pow(i, 2);


            if(i > r1) powR1 = 0;
            double y1 =0;
            if(powR1 != 0){
                y1 = Math.sqrt(powR1 - powX); // 작은 원에 대한 점
                if(y1 > Math.floor(y1)){
                    y1 = Math.ceil(y1);
                }
            }

            double y2 = Math.sqrt(powR2 - powX); // 큰 원에 대한 점
            if(y2 > Math.floor(y2)){
                y2 = Math.floor(y2);
            }
            answer += (int)y2 - (int)y1 + 1;

        }

        return answer*4 - onLine; //중복된 부분을 제거
    }
}

 

계산은 1사분면에 대한 것만 하고 중복된 점을 제외한다는 것에 초점을 두었다.

식 자체는 수학에 대한 연산일 뿐 딱히 어려운 부분은 없었다. 

 

원을 여러개 그리면서 기존에 배운 수식을 떠올린다면 크게 어렵지는 않은 문제였다.

다만 그 과정이 오래걸렸다 ㅠ