# 사다리
from math import sqrt
x, y, c = map(float, input().split())
start, end = 0, min(x, y)
def get_c(mid):
a = sqrt(x**2-mid**2)
b = sqrt(y**2-mid**2)
return a*b/(a+b)
result = 0
while end-start > 1e-6:
mid = (start+end)/2
if get_c(mid) >= c:
result = mid
start = mid
else:
end = mid
print("{}".format(round(result, 4)))
이분탐색
1. end를 둘 중 작은 값으로 설정
2. 이분탐색
- end-start가 1e-6(10^-6)보다 클 때까지 반복 (오차가 10^-3까지인데 get_c에서 제곱을 취해줌)
- get_c : x, y, mid를 이용해서 c를 계산하는 함수
3. 3자리까지 출력(오차가 소수점 3자리 까지라서 그냥 3자리까지 출력 가능)
실수를 다루는 이분탐색 + 수학 문제이다.
get_c 함수의 원리
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 1253번 - 좋다 (파이썬) (0) | 2022.03.29 |
---|---|
[백준] 16434번 - 드래곤 앤 던전 (파이썬) (1) | 2022.03.28 |
[백준] 3649번 - 로봇 프로젝트 (파이썬) (0) | 2022.03.26 |
[백준] 3079번 - 입국심사 (파이썬) (0) | 2022.03.25 |
[백준] 2343번 - 기타 레슨 (파이썬) (0) | 2022.03.25 |