백준 - 1002번 : 터렛 (C++)

RoundAbout·2024년 2월 2일
0

BaekJoon

목록 보기
47/90

풀이 방법 : 수학

각 두 개의 터렛의 좌표와 해당 좌표에서 마린까지의 거리가 나와있으니 두 개의 원을 그릴 수 있다.

그 두 개의 관계에 따라 원이 만나는 지점의 갯수를 생각해주면 마린이 있을 수 있는 위치의 갯수를 알 수 있다.

아예 안만나는 경우 = 0개
외접 혹은 내접 = 1개
두 점에서 만나는 경우 = 2개
두 원이 정확히 일치하는 경우 = 무한 개 ( -1 출력)

#include <iostream>

using namespace std;

int main()
{
	cin.tie(nullptr);
	cout.tie(nullptr);
	ios::sync_with_stdio(false);

	int T;
	cin >> T;

	while (T > 0)
	{
		--T;

		int x1, y1, r1;
		int x2, y2, r2;

		cin >> x1 >> y1 >> r1;
		cin >> x2 >> y2 >> r2;
		
		int DistX = (x2 - x1) * (x2 - x1);
		int DistY = (y2 - y1) * (y2 - y1);
	
		int Dist = DistX + DistY;
		int RadiusCond1 = (r1 + r2) * (r1 + r2);
		int RadiusCond2 = (r1 - r2) * (r1 - r2);

		if (Dist == 0)
		{
			if (r1 == r2)
				cout << -1 << '\n';

			else
				cout << 0 << '\n';

			continue;
		}

		if (Dist < RadiusCond1)
		{
			if (Dist == RadiusCond2)
			{
				cout << 1 << '\n';
			}

			else if (Dist < RadiusCond2)
			{
				cout << 0 << '\n';
			}

			else
			{
				cout << 2 << '\n';
			}
		}

		else if (Dist == RadiusCond1)
		{
			cout << 1 << '\n';
		}

		else if (Dist > RadiusCond1)
		{
			cout << 0 << '\n';
		}
	}
}

한 원이 다른 원 안에 있는 경우를 생각 안해서 생각보다 오래 헤매서 너무 아쉬운 문제

profile
게임하고 피자 좋아함

0개의 댓글

관련 채용 정보