본문 바로가기
Programming/Coding Test

[BAEKJOON] 1002번 터렛 | 두 원의 교차점의 수 구하는 방법(feat. Python)

by 혀코 2022. 7. 12.

안녕하세요. 혀코입니다.

이번 시간에는 BAEKJOON 1002번 터렛 - 두 원의 교차점의 수를 구하는 문제를 풀어보도록 하겠습니다.

첫째줄에 테스트 케이스 수가 주어지고,

두 원의 중심점이 (x1, y1), (x2, y2) 그리고 반지름이 (r1, r2) 이라고 할때

x1, y1, r1, x2, y2, r2 이렇게 입력됩니다.

입력:

3
0 0 13 40 0 37
0 0 3 0 7 4
1 1 1 1 1 5

 

풀이:

첫째줄의 테스트 케이스 수를 입력 받습니다.

T = int(input())

그리고 테스트 케이스의 수만큼 for 문을 돌립니다.

for _ in range(T):

원의 중심점과 반지름의 정보를 입력받습니다.

x1, y1, r1, x2, y2, r2 = list(map(int, input().split()))

두 원의 중심점의 거리(distance)를 구합니다.

import math
distance = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)

만약 두 중심점이 동일한 위치에 있고 반지름이 동일하다면, 두 원의 교차점은 무한합니다. 

교차점이 무한일 때, -1을 출력합니다.

if x1 == x2 and y1 == y2:
    if r1 == r2:
        print(-1)

두 중심점이 동일한 위치에 있고 반지름이 다르다면, 두 원의 교차점은 없습니다. 교차점이 없을 때 0을 출력합니다.

if x1 == x2 and y1 == y2:
    if r1 !== r2:
        print(0)

만약 두 중심점이 동일한 위치에 없고 두 중심점의 거리에 하나의 원의 반지름 더한 것이 다른원의 반지름 보다 작을 경우 또는 두 원의 반지름이 합이 두 원의 중심점의 거리보다 작을 경우에 교차점이 없으므로 0을 출력합니다.

if r1 > distance + r2 or r2 > distance + r1 or distance > r1 + r2: 
    print(0)

만약 두 원의 중심점의 거리와 두 원의 반지름의 길이의 합이 같을 경우 교차점은 1로 표시합니다.

if r1 + r2 == distance or abs(r1 - r2) == distance:
    print(1)

앞서 말한 조건 이외에는 모두 교차점이 두개이므로 2를 표시합니다.

else:
    print(2)

 

import math

T = int(input())

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

    if x1 == x2 and y1 == y2:
        if r1 == r2:
            print(-1)
        else:
            print(0)

    else:
        if r1 > distance + r2 or r2 > distance + r1 or distance > r1 + r2:
            print(0)
        elif r1 + r2 == distance or abs(r1 - r2) == distance:
            print(1)
        else:
            print(2)

 

이렇게 BAEKJOON 1002번 터렛 - 두원의 교차점의 수를 구하는 문제를 풀어봤습니다.

해당 정보가 유용하셨다면, 공감과 구독 부탁 드립니다.

감사합니다. :)

댓글