[Baekjoon] 백준 1002번 Python

방선생·2025년 1월 10일

Baekjoon

목록 보기
2/24

백준 1002번

사전 지식: 점과 점사이의 거리 공식, 두 원의 위치관계

점과 점사이의 거리

d=(x2x1)2+(y2y1)2d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}


import math

T = int(input())

for _ in range(T):
    x1, y1, r1, x2, y2, r2 = list(map(int, input().split()))
    dis = math.sqrt((x1 - x2)**2 + (y1 - y2)**2)

    if dis == 0:
        if r1 == r2: 
            print(-1)
        else:                   
            print(0)
            
    else:       
        if r1+r2 == dis or abs(r2-r1) == dis:
            print(1)
            
        elif ((abs(r1-r2) < dis) and (dis < r1+r2)):
            print(2)
            
        else:
            print(0)
            

코드 설명

  1. 두 원의 접점의 개수를 구하는 문제임

  2. 수학적 계산을 해야하기 때문에 import math 사용

  3. 테스트 케이스 입력

  4. 입력 값들 입력 후 점과 점 사이의 거리(dis) 계산

  5. 거리(dis)가 0일 경우 : 원의 중심이 같음
    ⇒ 반지름이 같으면 같은 원이기 때문에 접점이 무한(-1), 다를 경우 접점이 없음(0)

  6. 이외의 접점이 한 개인 경우 = 접하는 경우 :
    반지름의 합과 거리(dis)가 같거나(외접하거나) 큰 원 반지름 - 작은 원 반지름이 거리(dis)인 경우(내접하는 경우)
    ⇒ r1+r2 == dis or abs(r2-r1) == dis

  7. 두 원이 두 점에서 만나는 경우 :
    거리(dis)가 두 원의 반지름의 합보다 작거나(크면 만나지 않음)
    거리(dis)가 두 원의 차보다 큰 경우(같으면 접하고 차보다 작으면 만나지 않음)
    ⇒ (abs(r1-r2) < dis) and (dis < r1+r2)

  8. 이외의 케이스에선 모두 두 원이 만나지 않음
profile
AI & Robotics

0개의 댓글