백준|1002번|터렛

README·2022년 7월 31일
0

파이썬 PS풀이

목록 보기
28/136

문제설명
두 원의 좌표와 반지름을 입력받아서 두 원의 교점의 개수를 출력하는 문제입니다.(단, 두 원의 교점이 무한히 많을 경우 -1을 출력합니다.)

작동 순서
1. 입력받을 정보의 개수를 입력합니다.
2. 원의 좌표와 반지름을 입력받습니다.
3. 우선 두 원의 좌표가 같은 경우 반지름을 비교하여 같을 경우 두 원은 같은 원이므로 -1을 출력하고 다를 경우 동심원이므로 0을 출력합니다.
4. 교점 사이의 거리가 반지름의 합이 같은 경우 외접하여 한 점에서 만나고 반지름의 차와 같은 경우는 내접하여 한 점에서 만나는 경우 이므로 1을 출력합니다.
5. 교점 사이의 거리가 반지름의 합보다는 작고 차보다는 큰 경우 두 원은 두 점에서 만나므로 2를 출력합니다.
6. 교점 사이의 거리가 반지름의 합보다 큰 경우 두 원은 먼 거리에 있어서 만나지 않는 경우이고 교점 사이의 거리가 반지름의 차보다 작은 경우는 한 원이 다른 원안에 들어있는 경우로 접점이 없으므로 0을 출력합니다.

소스코드

import sys
for i in range(int(sys.stdin.readline())):
    x1, y1, r1, x2, y2, r2 = map(int, sys.stdin.readline().split())
    distance = (abs(x1-x2)**2+abs(y1-y2)**2)**(1/2)
    if x1 == x2 and y1 == y2:
        if r1 == r2:
            print(-1)
        else:
            print(0)
    elif distance == r1+r2 or distance == abs(r1-r2):
        print(1)
    elif r1+r2 > distance > abs(r1 - r2):
        print(2)
    elif distance > r1+r2 or distance < abs(r1-r2):
        print(0)
profile
INTP 개발자 지망생

0개의 댓글