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

 

프로그래머스

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

programmers.co.kr

 

 

※ 문제

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


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

 

※ 나의 풀이

일단 피타고라스 정리를 이용하여 접근하면 편하다.

먼저 x축과 y축에 있는 점들은 제외하고 4분면으로 나누어서 각 면에 있는 점들을 구하여 곱하기 4를 해준다.

그 후, x축과 y축에 있는 점들을 더해주면 된다!

 

	int r1 = 2, r2 = 3;
	vector<pair<int, int>> points;
	
	long long answer = 0;
	double r2y = 0, r1y = 0;
	int side = 0;
	for (int i = 1; i < r2; i++)
	{
		r2y = sqrt(pow(r2, 2) - pow(i, 2));

		if (r1 > i) r1y = sqrt(pow(r1, 2) - pow(i, 2));
		else r1y = 0;

		if (r1y - (int)r1y == 0 && r1y != 0)
			side++;

		answer += ((int)r2y - (int)r1y);
	}
	answer = (answer + side + r2 - r1 + 1) * 4;

'알고리즘 > Coding Test' 카테고리의 다른 글

광물 캐기 C++  (0) 2023.04.17
과제 진행하기 C++  (0) 2023.04.16
요격 시스템 C++  (0) 2023.04.14
추억점수 C++  (0) 2023.04.14
달리기 경주 C++  (0) 2023.04.14

+ Recent posts