각 좌표를 중심으로 하는 원을 그린다고 생각하자.
왜 원이 그려지나??
만들어진 두 원의 위치에 대한 경우의 수를 고려해준다.
#include <iostream>
#include <cmath> // pow 함수를 사용하기 위해 선언
using namespace std;
int main() {
int T;
int arr[10] = { 0, };
cin >> T;
for (int i = 0; i < T; i++) {
for (int j = 0; j < 6; j++) {
cin >> arr[j];
}
int jo = pow(arr[0] - arr[3], 2) + pow(arr[1] - arr[4], 2); // 두 좌표 사이의 거리
if (arr[0] == arr[3] && arr[1] == arr[4]) { // 두 좌표가 같고 (동심원)
if (arr[2] == arr[5]) // 각 좌표와 류재명 사이의 거리가 같으면 ==> 원이 그려지는 모든 좌표에 류제명이 있을 수 있다.
cout << -1 << endl;
else // 류재명과 각 좌표 사이의 거리가 다르면 ==> 겹치지 않는다.
cout << 0 << endl;
}
else if (jo == pow(arr[2] + arr[5],2)) // 외접 ==> 두 좌표의 거리 == 각 원의 반지름을 더한 값
cout << 1 << endl;
else if (jo < pow(arr[2] + arr[5],2) && jo> pow(arr[2] - arr[5], 2)) // 교접 ==> 원의 위치가 외접 ~ 내접 사이에 있어야 함.
cout << 2 << endl;
else if(jo == pow(arr[2] - arr[5],2)) // 내접 ==> 두 좌표의 거리 == 각 원의 반지름을 뺀 값
cout << 1 << endl;
else // 한 원이 다른 원의 내부에 있고 만나지 않을 때, 두 원이 만나지 않을 때(떨어져 있을 때)
cout << 0 << endl; // 즉, pow(arr[2] - arr[5],2) > jo , pow(arr[2] + arr[5],2) < jo
}
return 0;
}
케이스에 대해 총 6개의 값을 받는다.
두 원이 교접할 때
jo < pow(arr[2] + arr[5],2)
만 고려를 해줘서 틀렸습니다
를 연발했다.왜 이렇게 쉬운 걸 생각 못했지?
라는 생각을 하지만 처음에 계속 생각해도 답이 안나오는게 신기하기도 하고....ㅠㅠ