파이썬 백준 1002번
실버3
https://www.acmicpc.net/problem/1002
문제 보기
분류: 수학, 기하학
문제 풀기
어떤 두 개의 원이 2차원 평면 위에 존재할 수 있는 방법에 대해 묻는 문제이다.
문제에서 주어진 x1, y1, r1, x2, y2, r2 는 원의 중심 좌표와 반지름으로 생각하면
1. 두 원의 중심과 반지름이 완벽히 같을때 무한의 교점을 갖는다.
if x1 == x2 and y1 == y2 and r1 == r2:
print(-1)
2. 두 원의 중심 거리의 크기가 두 반지름의 차 보다 크고 합 보다 작을때 두 개의 교점을 갖는다.
elif (r1-r2)**2 < fnDistanceFromTurret(x1, x2, y1, y2) < (r1+r2)**2:
print(2)
3. 두 원의 줌심 거리의 크기가 두 반지름의 합과 같거나 차와 같을때 한 개의 교점을 갖는다.
elif fnDistanceFromTurret(x1, x2, y1, y2) == (r1+r2)**2 or fnDistanceFromTurret(x1, x2, y1, y2) == (r1-r2)**2:
print(1)
4. 그 외 두 원은 서로 외부에 존재하거나 내부에 존재할때 교점이 생기지 않는다.
else:
print(0)
r1 + r2 < distance
|r1 - r2| > distance, r1 ≠ r2
코드 보기
import sys
inputdata = sys.stdin.readline
def fnNumberOfExistence(T):
for _ in range(T):
x1, y1, r1, x2, y2, r2 = map(int, inputdata().split())
if x1 == x2 and y1 == y2 and r1 == r2:
print(-1)
elif (r1-r2)**2 < fnDistanceBetweenC(x1, x2, y1, y2) < (r1+r2)**2:
print(2)
elif fnDistanceBetweenC(x1, x2, y1, y2) == (r1+r2)**2 or fnDistanceBetweenC(x1, x2, y1, y2) == (r1-r2)**2:
print(1)
else:
print(0)
def fnDistanceBetweenC(x1, x2, y1, y2):
squaredDistance = (x2 - x1) ** 2 + (y2 - y1) ** 2
return squaredDistance
if __name__ == "__main__":
T = int(inputdata().strip())
fnNumberOfExistence(T)
# 3
# 0 0 13 40 0 37
# 2
# 0 0 3 0 7 4
# 1
# 1 1 1 1 1 5
# 0
'공부하기 > 백준' 카테고리의 다른 글
[Python] 백준 풀기 1012 - 유기농 배추 (0) | 2022.11.13 |
---|---|
[Python] 백준 풀기 2606 - 바이러스 (0) | 2022.11.12 |
[Python] 백준 풀기 1152 - 단어의 개수 (0) | 2022.11.10 |
[Python] 백준 풀기 1157 - 단어 공부 (0) | 2022.11.09 |
[Python] 백준 풀기 1406 - 에디터 (0) | 2022.11.08 |