티스토리 뷰

해설

원 안에 있는 정점의 개수를 구하는 문제이다.

4분면을 전부 계산하는 것은 부담이 되기 때문에 1분면만 검사하고 *4 해준다.

작은 원의 정점들을 구할 때는 테두리에 정점을 포함하는 원들을 주의해야 한다.


문제 설명

x축과 y축으로 이루어진 2차원 직교 좌표계에 중심이 원점인 서로 다른 크기의 원이 두 개 주어집니다. 반지름을 나타내는 두 정수 r1, r2가 매개변수로 주어질 때, 두 원 사이의 공간에 x좌표와 y좌표가 모두 정수인 점의 개수를 return하도록 solution 함수를 완성해주세요.

※ 각 원 위의 점도 포함하여 셉니다.


제한 사항

  • 1 ≤ r1 < r2 ≤ 1,000,000

입출력 예

r1 r2 result

2 3 20

입출력 예 설명

그림과 같이 정수 쌍으로 이루어진 점은 총 20개 입니다.


코드

#include <string>
#include <vector>
#include <math.h>
#include <iostream>

using namespace std;

long long solution(int r1, int r2)
{ 
    long long R2 = r2;
    
    for(long long i=1;i<r2;i++)
        R2 += (long long)sqrt((long long)r2*r2 - i*i);
    R2 =  R2*4+1;
    
    long long R1 = r1-1;
    for(long long i=1;i<r1;i++)
    {
        long long tmp = (long long)sqrt((long long)r1*r1 - i*i);
        if(tmp*tmp + i*i == (long long)r1*r1)
            R1 += tmp - 1;
        else
            R1 += tmp;
    }
    R1 =  R1*4+1;    
    cout << R2 << " , "<<R1;
    
    return R2 - R1;
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함