본문 바로가기
알고리즘 풀이/프로그래머스

[프로그래머스] Level 2. 두 원 사이의 정수 쌍

by 2245 2023. 5. 12.

🔗 문제

 

 

 

👨🏻‍💻 풀이 및 코드

원에 포함된 정수 쌍의 갯수는 x^2 + y^2 = r^2 공식을 사용해 구할 수 있다. 

 

ex) 예제에 나온 r = 3 일 때의 정수 쌍의 갯수

x 가 1일 때, y 는 2루트2다. → 2.xx  따라서 y의 정수의 갯수는 0, 1, 2 (3개)

x 가 2일 때, y 는 루트5다. → 2.xx 따라서 y의 정수의 갯수는 0, 1, 2 (3개)

x 가 3일 때, y 는 0 이다. 따라서 y의 정수의 갯수는 0 (1개)

 

이제 원에 포함된 정수 쌍의 갯수를 구하는 법을 알았으니, 두 원 사이에 포함된 정수 쌍의 갯수를 구하려면

바깥 원에 포함된 정수 쌍의 갯수 - 안쪽 원에 포함된 정수 쌍의 갯수를 하면 된다.

 

주의해야 할 점이 정수 쌍의 갯수를 셀 경우, 안쪽 원의 테두리에 있는 점도 포함시키는데 문제에선 이 점도 두 원 사이 내부에 있다고 판단하기 때문에 이 점을 빼버리면 안된다. 따라서 안쪽 원에 포함된 정수 쌍을 구할 때 1.xx 일 경우엔 2개가 되지만, 0일 경우엔 0이다. 이 부분을 ceil 로 해결했다. 

 

전체 코드

class Solution {
    public long solution(int r1, int r2) {
        long answer = 0;
        for(int i=1; i<=r2; i++) {
            int maxJ = (int)Math.floor(Math.sqrt((long)r2*r2 - (long)i*i))+1;
            int minJ = (int)Math.ceil(Math.sqrt((long)r1*r1 - (long)i*i));
            
            answer += maxJ - minJ;
        }
        
        return answer * 4;
    }
}