본문 바로가기
Algorithm/BOJ

[백준] 2022번 - 사다리 (파이썬)

by _temp 2022. 3. 27.

https://www.acmicpc.net/problem/2022

 

# 사다리
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 함수의 원리