안녕하세요. 혀코입니다.
이번 시간에는 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번 터렛 - 두원의 교차점의 수를 구하는 문제를 풀어봤습니다.
해당 정보가 유용하셨다면, 공감과 구독 부탁 드립니다.
감사합니다. :)
댓글