[C++][백준 31534] 현대모비스 선풍기 굴리기

PublicMinsu·2024년 3월 10일
0

문제

생략

접근 방법

옆면으로 굴릴 경우 원은 빗변을 통해서 그려진다.
작은 원과 큰 원의 빗변을 구하면 된다.

코드

#include <iostream>
#include <cmath>
using namespace std;
double a, b, h, lowH;
const double PI = acos(-1);
int main()
{
    ios::sync_with_stdio(0), cin.tie(0);
    cout << fixed;
    cout.precision(7);

    cin >> a >> b >> h;

    if (a == b) // 원기둥인 경우
    {
        cout << -1;
        return 0;
    }

    if (a > b)
    {
        swap(a, b);
    }

    lowH = a * h / (b - a);

    double bigSize = pow(lowH + h, 2) + pow(b, 2);
    double smallSize = a ? pow(lowH, 2) + pow(a, 2) : 0;

    cout << (bigSize - smallSize) * PI;
    return 0;
}

풀이

삼각형의 닮음과 피타고라스 정리를 활용하여 풀면 된다.
삼각형의 닮음으로 높이를 구하고 피타고라스 정리를 활용하여 빗변의 제곱을 구하면 된다. 빗변의 제곱은 원의 넓이에 활용할 수 있으므로 파이를 곱하여서 원의 넓이를 구하면 된다.

profile
연락 : publicminsu@naver.com

0개의 댓글

관련 채용 정보