프로그래머스/2레벨

[프로그래머스/C++] 두 원 사이의 정수 쌍

Koalitsiya 2024. 3. 12. 17:36
 

프로그래머스

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

programmers.co.kr

 

#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;

long long solution(int r1, int r2) {
    long long answer = 0;

    // 축을 제외한 한 사분면에 존재할 수 있는 정수 좌표의 수 구하기
    for (int i = 1; i < r2; ++i) {
        int bigRound = 0;
        int smallRound = 0;

        // 큰 원 내부에서 x좌표가 i일 때 존재할 수 있는 정수 좌표의 수
        bigRound = floor(sqrt(pow(r2, 2) - pow(i, 2)));
        
        if(i < r1)
            // 작은 원 내부에서 x좌표가 i일 때 존재할 수 있는 정수 좌표의 수
            smallRound = ceil(sqrt(pow(r1, 2) - pow(i, 2)));
        else
            smallRound = 1;
              
        answer += (bigRound - smallRound + 1);
    }

    // 4 x (한 사분면의 좌표 수 + 한 축 위에 존재할 수 있는 큰 원과 작은 원 사이의 좌표 수(= r2 -r1 + 1))
    return 4 * (answer + r2 - r1 + 1);
}