반응형
내가 이 문제를 틀린 이유는 소수점 3개(0.000) 을 지키지 않아서 였다.
이런 실수에 주의하자.
문제
두 원이 주어졌을 때, 교차하는 영역의 넓이를 소수점 셋째자리까지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 두 원의 중심과 반지름 x1, y1, r1, x2, y2, r2가 주어진다. 실수는 최대 소수점 둘째자리까지 주어진다.
출력
첫째 줄에 교차하는 영역의 넓이를 반올림해 소수점 셋째자리까지 출력한다.
구현
import math
x0, y0, r0, x1, y1, r1 = map(float, input().split())
def area(x0, y0, r0, x1, y1, r1):
d = math.sqrt((x0 - x1) ** 2 + (y0 - y1) ** 2)
rr0 = r0 * r0
rr1 = r1 * r1
# Circles do not overlap
if (d > r1 + r0):
return 0
# Circle1 is completely inside circle0
elif (d <= abs(r0 - r1) and r0 >= r1):
return math.pi * rr1
# Circle0 is completely inside circle1
elif (d <= abs(r0 - r1) and r0 < r1):
# Return area of circle0
return math.pi * rr0
# Circles partially overlap
else:
phi = (math.acos((rr0 + (d * d) - rr1) / (2 * r0 * d))) * 2
theta = (math.acos((rr1 + (d * d) - rr0) / (2 * r1 * d))) * 2
area1 = 0.5 * theta * rr1 - 0.5 * rr1 * math.sin(theta)
area2 = 0.5 * phi * rr0 - 0.5 * rr0 * math.sin(phi)
# Return area of intersection
return area1 + area2
answer = float(round(1000 * area(x0, y0, r0, x1, y1, r1)) / 1000)
print('%.3f' % answer)
반응형
'알고리즘' 카테고리의 다른 글
백준 17144번 미세먼지 안녕! 골드 5 파이썬 삼성 역량 (0) | 2021.02.08 |
---|---|
백준 20057번 마법사 상어와 토네이도 파이썬 골드4 삼성 (0) | 2021.02.05 |
백준 14891번 톱니바퀴 삼성기출 파이썬 wip (0) | 2021.02.03 |
프로그래머스 Summer Coding 방문 길이 파이썬 step3 (0) | 2021.02.01 |
백준 1516번 게임 개발 골드3 파이썬 (0) | 2021.01.29 |