백준 1002번은 중학교? 고등학교? 때 배운 두 원의 위치 관계에 대한 문제이다. 두 원의 중심과 반지름이 주어지고, 이 원들의 위치 관계를 묻는다.
두 원의 반지름 길이는 각각 r1, r2라고 하고, 두 원의 중심의 거리는 d라고 칭하겠다.
두 가지 경우가 있다.
1) 원이 서로 밖에서 만나지 않을 때 : r1 + r2 < d
2) 원이 서로 안에서 만나지 않을 때 : |r1 - r2| > d
이것 또한 두 가지 경우가 있다.
1) 원이 서로 외접할 때 : r1 + r2 = d
2) 원이 서로 내접할 때 : |r1 - r2| = d
우리는 이러한 경우는
1) 원의 중심이 같다
2) 반지름의 길이 또한 같다
라고 할 때, 두 원이 같다고 말할 수 있겠다.
그 이외의 경우엔 모두 두 점에서 만나므로, 코드는 이렇게 나오게 된다:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void) {
	int num;
	scanf("%d", &num);
	int x1; int y1; int r1;
	int x2; int y2; int r2;
	int *result = (int*)malloc(sizeof(int) * num); //동적배열 할당
	for (int i = 0; i < num; i++) {
		scanf("%d %d %d %d %d %d", &x1, &y1, &r1, &x2, &y2, &r2);
		double distance = sqrt((x1 - x2) * (x1 - x2) + ((y1 - y2) * (y1 - y2)));
		if (distance > r1 + r2) { //원이 서로 밖에서 만나지 않을 때
			result[i] = 0;
		}
		else if (distance < abs(r1 - r2)) { //원이 서로 안에서 만나지 않을 때
			result[i] = 0;
		}
		else if (distance == 0 && r1 == r2) { //원의 중심이 같고, 반지름의 길이가 같다 = 원이 서로 같다 = 무한대
			result[i] = -1;
		}
		else if (distance == r1 + r2) { //원이 서로 외접할 때
			result[i] = 1;
		}
		else if(distance == abs(r1 - r2)) { //원이 서로 내접할 때
			result[i] = 1;
		}
		else { //그 외의 경우는 모두 2점에서 만난다
			result[i] = 2;
		}
	}
	for (int i = 0; i < num; i++) {
		printf("%d\n", result[i]);
	}
	free(result);
	return 0;
}