GitHubSeob
C++ / 백준 / 2022 / 사다리 본문
문제
https://www.acmicpc.net/problem/2022
2022번: 사다리
첫째 줄에 차례대로 x, y, c에 해당하는 양의 실수 세 개가 입력된다. 수는 소수점 여섯째 자리까지 주어질 수 있다.
www.acmicpc.net
문제풀이
닮음을 이용하여 풀었다.
왼쪽 삼각형
오른쪽 삼각형
라는 식을 얻을 수 있다.
또 피타고라스 정리에 의해서
이후에 양변을 루트를 씌우면 h1, h2의 식을 구할 수 있다.
우리는 w1+w2인 값을 구해야한다.
이분탐색을 이용하여 이 값을 구한다.
w1+w2를 이분탐색의 mid값으로 두고, h1과 h2값을 구하고 h1*h2/(h1+h2)값과 c값을 비교하면서
문제에 나온 오차가 10^-3 이하로 나오도록 조건을 건다.
코드
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
double x = 0, y = 0, c = 0;
cin >> x >> y >> c;
double left = 0, right = min(x, y);
while (right - left >= 1e-3) {
double width = (left + right) / 2;
double height1 = sqrt(pow(x, 2) - pow(width, 2));
double height2 = sqrt(pow(y, 2) - pow(width, 2));
double num = height1 * height2 / (height1 + height2);
if (num < c)
right = width;
else left = width;
}
cout << fixed;
cout.precision(3);
cout << right;
}
'Baekjoon > Silver' 카테고리의 다른 글
C++ / 백준 / 1780 / 종이의 개수 (0) | 2021.08.24 |
---|---|
C++ / 백준 / 11728 / 배열 합치기 (0) | 2021.08.24 |
C++ / 백준 / 2512 / 예산 (0) | 2021.08.20 |
C++ / 백준 / 2110 / 공유기 설치 (0) | 2021.08.19 |
C++ / 백준 / 2805 / 나무 자르기 (0) | 2021.08.18 |