파이썬 문제풀이

[백준 파이썬] 7869 두 원

냄비짱 2024. 1. 9. 10:02
728x90

📌문제 출처

백준 단계별 문제풀이 : 기하2
https://www.acmicpc.net/problem/7869

 

7869번: 두 원

첫째 줄에 두 원의 중심과 반지름 x1, y1, r1, x2, y2, r2가 주어진다. 실수는 최대 소수점 둘째자리까지 주어진다.

www.acmicpc.net

❓ 문제

📗 풀이 코드

'''
제 2 코사인 법칙을 활용해 각도를 구해서 넓이를 구하는데 사용
'''
from math import dist, pi, acos, sin
input = open(0).readline

def solution():
    x1, y1, r1, x2, y2, r2 = map(float, input().split())
    if (x1-x2)**2 + (y1-y2)**2 >= (r1+r2)**2: # 겹치지 않는 경우(계산 편의상 거리의 제곱끼리 비교)
        print('0.000') # 문자열이 아닌 실수 형태는 오답 처리
    else:
        d = dist((x1, y1),(x2, y2)) # 두 원의 중심 간 거리를 구하는 함수 사용
        if d <= abs(r1-r2): # 완전히 겹치는 경우
            result = pi*min(r1,r2)**2
        else: # 일부만 겹치는 경우
            theta1 = 2*acos((r1*r1+d*d-r2*r2)/(2*r1*d))
            theta2 = 2*acos((r2*r2+d*d-r1*r1)/(2*r2*d))
            result = r1*r1*(theta1-sin(theta1))/2 + r2*r2*(theta2-sin(theta2))/2
        print(f'{round(result, 3):.3f}')

if __name__ == '__main__':
    solution()

 

✍ 상세한 풀이