[백준 1002번-파이썬/Python] 터렛
알고리즘 공부/BOJ백준 풀이

[백준 1002번-파이썬/Python] 터렛

http://acmicpc.net/problem/1002

{코드}

for _ in range(int(input())):
	x1, y1, r1, x2, y2, r2 = map(int, input().split())
	d = (x1-x2)**2 + (y1-y2)**2
	rad_sum = (r1 + r2)**2
	rad_dif = (r1 - r2)**2
	if d == 0:
		if r1 == r2:
			print(-1)
		else:
			print(0)
	else:
		if d in [rad_sum, rad_dif]:
			print(1)
		elif rad_dif < d < rad_sum:
			print(2)
		else:
			print(0)

{설명}

어떤 점이 주어졌을 때 그 점에서 일정한 거리에 있는 점들은 원을 형성합니다.

즉, 두 점은 원의 중심이, 적까지의 거리는 반지름이 됩니다.

위 문제에서는 두 점에서 각각 적까지의 거리가 주어지므로 두 개의 원이 형성됩니다.

이때, 이 두 원의 교점이 적의 위치가 되기 때문에 교점의 개수가 답이 됩니다.

이를 위해 먼저 두 중심 사이의 거리를 구하고

만약 거리가 0이라면 두 원의 중심이 같은 것이므로 두 반지름이 같으면 적의 위치는 무한개, 다르면 없습니다.

만약 거리가 0이 아니라면 두 원의 중심 사이의 거리를 반지름의 합과 차와 비교해야 합니다.

만약 거리가 반지름의 합과 같다면 두 원이 밖에서 만나게 되고 차와 같으면 한 원 안에 다른 원이 한 점에서 만나게 됩니다.

만약 거리가 반지름의 합보다 작고 차보다 크면 두 점에서 교점이 생기게 됩니다.

나머지 경우는 서로 만나지 않는 경우입니다.