BOJ Code/Gold

[백준/BOJ] gold3 - 14786번 Ax+Bsin(x)=C ② (Python)

NIMHO 2022. 12. 5. 13:00
728x90

▶14786 - Ax+Bsin(x)=C ②

문제

A, B, C가 주어졌을 때, Ax+Bsin(x)=C를 만족하는 x를 찾는 프로그램을 작성하시오.

 

입력

첫째 줄에 정수 A, B, C가 주어진다. (0 < B ≤ A ≤ 100,000, 0 < C ≤ 100,000)

 

출력

첫째 줄에 x를 출력한다. 정답과의 절대/상대 오차는 10-9까지 허용한다.

728x90

풀이

start와 end를 각각 0과 2c로 두고 풀었다.

end를 2c로 둔 이유는 그냥이다... 죄송합니다.

 

아무튼 기준으로 잡은 start와 end를 가지고 이분 탐색을 돌렸다.

기준이 되는 오차가 있기에, start와 end의 차이가 오차보다 작아지면 반복문을 종료하였다.

 

또한 f(mid) 값이 바로 0이 될 수도 있기에 그때도 종료시켜 주었다.

import math


def f(x):
    return a * x + b * math.sin(x) - c


a, b, c = map(int, input().split())
check = 10 ** (-9)
s, e = 0, 2*c

while abs(s - e) > check:
    mid = (s + e) / 2
    if f(mid) == 0:
        break
    elif f(mid) < 0:
        s = mid
    else:
        e = mid

print(mid)
728x90