본문 바로가기

프로그래밍/백준

BOJ 1002 - 터렛 (C++)

문제

해결 과정

문제의 핵심은 간단하다.

x1, y2 점에서 r1반지름을 가진 원과 x2,y2 점에서 r2 반지름을 가진 원의 교점의 개수를 찾는 문제이다.

 

문제에서 요구하는 정답은 다음과 같다.

1. 원과 원이 완벽하게 서로 겹치는지 (무한한 접점)

2. 원과 원의 거리가 r1과 r2의 합와 동일한지 (한 점이 접하는지)

3. 원과 원의 거리가 r1+r2보다 작고 두 반지름의 차이가 거리보다 작은지 (두 점이 접하는지)

4. 그 외는 모두 접하지 않음

 

코드

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
	int n; cin >> n;
	int ans;

	for (int i = 0; i < n; i++)
	{
		int x1, y1, x2, y2, r1, r2;
		double dist;
		int diff;
		cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;

		dist = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
		diff = abs(r1 - r2);

		if (dist == 0 && r1 == r2) ans = -1;
		else if (dist == r1 + r2 || dist == diff) ans = 1;
		else if (dist < r1 + r2 && (diff < dist)) ans = 2;
		else ans = 0;

		cout << ans << endl;
	}
	return 0;
}

'프로그래밍 > 백준' 카테고리의 다른 글

백준 2563 - 색종이 (C++)  (0) 2025.08.19