[BOJ, 백준] 7869 두 원
2024. 7. 26. 22:42ㆍAlgorithm
중요한 것은 소수점 셋째자리까지 출력하는 것이겠다.
예를 들어, 0이라면 0.000으로 출력하는 것인데 이 부분에 대해서는 문자열로 출력해주기로 했다.
두 원의 위치 관계에 대해서는 중심 사이의 거리와 반지름을 활용하면 되겠다.
import math
x_1,y_1,r_1,x_2,y_2,r_2 = map(float,input().split())
#일반적으로 r1이 r2보다 더 길거나 같다고 가정하자.
if r_1 < r_2:
new_x, new_y, new_r = x_1,y_1,r_1
x_1,y_1,r_1 = x_2,y_2,r_2
x_2,y_2,r_2 = new_x, new_y, new_r
d = math.sqrt((x_2 - x_1) ** 2 + (y_2 - y_1) ** 2)
r_sum = (r_1 + r_2) ** 2
r_diff = (r_1 - r_2) ** 2
#한점에서도 만나지도 않고 아예 외부에 존재하는 경우, 외부의 한점에서 만나는 경우
if r_sum <= d ** 2:
answer = "0.000"
print(answer)
#두 원중 작은쪽의 원이 내접, 포함하고 있는 경우
elif r_diff >= d ** 2:
answer = math.pi * (r_2 ** 2)
print(round(answer, 3))
#그 외의 경우
else:
theta_1 = 2 * math.acos((r_1 ** 2 + d ** 2 - r_2 ** 2) / (2 * r_1 * d))
theta_2 = 2 * math.acos((r_2 ** 2 + d ** 2 - r_1 ** 2) / (2 * r_2 * d))
answer = (r_1 ** 2) * (theta_1 - math.sin(theta_1)) / 2 + (r_2 ** 2) * (theta_2 - math.sin(theta_2)) / 2
print(round(answer, 3))
'Algorithm' 카테고리의 다른 글
[BOJ, 백준] 1806 부분합 Python (0) | 2024.08.10 |
---|---|
[BOJ, 백준] 8895 막대배치 Python (0) | 2024.08.05 |
[BOJ, 백준] 1007 벡터매칭 Python (0) | 2024.07.26 |
[BOJ, 백준] 1256 사전 Python (0) | 2024.07.26 |
[BOJ, 백준] 13206 Professor KCM Python (0) | 2024.07.25 |