반응형
두 원의 교점의 개수를 구하는 문제
코드
import math
t = int(input())
for _ in range(t):
x1,y1,r1,x2,y2,r2 = map(int,input().split())
distance = math.sqrt((x1-x2)**2 + (y1-y2)**2)
if distance == 0 and r1 == r2 :
print(-1)
elif abs(r1-r2) < distance < r1+r2 :
print(2)
elif distance == r1+r2 or distance == abs(r1-r2) :
print(1)
else:
print(0)
import math
math.sqrt() 는 제곱근을 구해주는 함수이다.
abs()는 절대값을 구해주는 함수
(1) 위치의 개수 : 무한대
-1을 출력하는 조건은 구하는 위치의 개수가 무한대인 경우인데 이 경우는 두 원이 동심원이면서 반지름이 같은 똑같은 원일 경우이다. 그렇기에 distance == 0 거리가 같고, r1==r2 거리가 같은 경우를 -1출력하게 한다.
(2) 위치의 개수 : 2
두 원이 겹치게 되면 만나는 교점이 2개가 생기는 것을 이용한다. abs(r1-r2) < distance < r1+r2 를 만족하면 두 원은 서로 다른 두점에서 만나게 된다.
(3) 위치의 개수 : 1
두 원의 교점이 1개인 경우는 내접하거나 외접하는 경우일 뿐이다.
내접하는 경우는 abs(r1-r2) = distance 일 때이고 외접하는 경우는 r1+r2 = distance 이다.
(4) 위치의 개수 : 0
만나지 못한 경우는 코드에서 else 문으로 표현했지만 수식으로 표현하면 아래와 같다.
distance > r1+r2 or distance < abs(r1-r2) 인 경우이다.
반응형
'Algorithm > Boj' 카테고리의 다른 글
백준 2798 파이썬 - 블랙 (0) | 2022.05.05 |
---|---|
[백준 python 2447번] (0) | 2022.05.02 |
백준 4948 파이썬 - '에라토스테네스 체' (0) | 2022.02.07 |
백준 2869 파이썬 / 달팽이는 올라가고 싶다 (0) | 2022.02.05 |
백준 2775 파이썬 / 부녀회장이 될테야 (0) | 2022.02.04 |