코딩테스트/프로그래머스

프로그래머스 두 원 사이의 정수 쌍 (C++)

Prooni 2024. 10. 7. 19:00

안녕하세요!

 오늘은 프로그래머스 두 원 사이의 정수 쌍 문제를 풀어볼게요~

 

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

 

프로그래머스

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

programmers.co.kr

 

처음에 굉장히 쉽게 당연히 원 안에 생기는 도형은 정사각형이겠지~

하다가 완전 다틀렸어용 ㅋㅋㅋㅋㅋㅋ

 

원의 방정식을 이용해서 x값 별로 y값의 개수를 세면 된답니다!

x, y축 점들은 따로 미리 개수를 구해놓고

1사분면에서의 개수만 구해서 4배 한 후에 더하면 됩니다.

 

전체 코드 첨부할게요!

 

 

#include <string>
#include <vector>
#include <cmath>

using namespace std;
long long Calc(int x, int r, bool onCeil)
{
    if(x > r)
    {
        return 0;
    }
    
    double y = sqrt(pow(r, 2) - pow(x, 2));
    y = onCeil == true ? ceil(y) : floor(y);
    return y;
}

long long solution(int r1, int r2) {
    long long answer = 0;
    
    long long x = 1;
    long long overlaps = (r2 - r1 + 1) * 4;
    while(x < r2)
    {
        long long a = Calc(x, r1, true);
        long long b = Calc(x, r2, false);
        if(a == 0) a = 1;
        answer += (b - a + 1);
        
        x++;
    }
    
    return (4 * answer) + overlaps;
}