[BOJ] 7869번 두 원 - Python

"기하"

Posted by Yongmin on September 29, 2021

문제

두 원

풀이

두 원의 관계와 코사인 법칙으로 theta를 구하는 것을 통해 정답을 도출한다.

소스 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import sys
from math import *

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

d = sqrt((x1-x2)**2 + (y1-y2)**2)

if(d>r1+r2): # 두 원이 서로 겹치지 않는 경우
    print("%0.3f" %0)
elif(r1>=r2 and r1-r2 >= d): #원2가 원1 내부에(서로 같은 경우도 포함)
    print("%0.3f" %(round(((r2**2)*pi),4)))
elif(r2>=r1 and r2-r1 >= d): #원1이 원2 내부에(서로 같은 경우도 포함)
    print("%0.3f" %(round(((r1**2)*pi),4)))
else: # 두 점에서 겹치는 경우
    theta1 = 2*acos((r1**2 + d**2 - r2**2)/(2*r1*d))
    theta2 = 2*acos((r2**2 + d**2 - r1**2)/(2*r2*d))
    area1 = 1/2*(r1**2)*theta1 - 1/2*(r1**2)*sin(theta1)
    area2 = 1/2*(r2**2)*theta2 - 1/2*(r2**2)*sin(theta2)
    result = round(area1+area2, 4)
    print("%0.3f" %result)


# # #