※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 4353번 문제인 Beavergnaw이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/4353
4353번: Beavergnaw
When chomping a tree the beaver cuts a very specific shape out of the tree trunk. What is left in the tree trunk looks like two frustums of a cone joined by a cylinder with the diameter the same as its height. A very curious beaver tries not to demolish a
www.acmicpc.net
문제에서 주어지는 그림을 기준으로 깎여나가지 않은 부분의 부피를 먼저 구해보자.
가운데의 원기둥의 부피와 위 아래의 원뿔대의 부피를 합한 것이 깎여나가지 않은 부분의 부피이다. 여기서 원뿔대의 부피는 높이 D/2의 큰 원뿔의 부피에서 높이 d/2의 작은 원뿔의 부피를 뺀 것으로 계산할 수 있다. 이를 이용하면 깎여나가지 않은 부분의 부피를 D와 d의 식으로 나타낼 수 있다.
이렇게 깎여나가지 않은 부분의 부피를 구했다면, 전체 원기둥에서 깎여나가지 않은 부피를 빼 깎여나간 부분의 부피를 구해낼 수 있다. 이를 이용해 V, D와 d로 이루어진 식 하나를 얻을 수 있다.
위 식을 적절히 변형하여 d를 구해내는 수식을 얻어 문제를 해결하자.
원주율은 acos(-1)로 계산할 수 있다.
세제곱근은 cmath헤더의 cbrt함수(cube root의 약자)를 이용하여 계산할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <cmath>
using namespace std;
double pi = acos(-1);
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout << fixed;
cout.precision(3);
int d, v; cin >> d >> v;
while (d + v) {
double D = d, V = v;
cout << cbrt(D * D * D - 6 * V / pi) << '\n';
cin >> d >> v;
}
}
'BOJ' 카테고리의 다른 글
[BOJ 10889 // C++] Ancient symbol (0) | 2022.06.05 |
---|---|
[BOJ 5544 // C++] 리그 (0) | 2022.06.05 |
[BOJ 11735 // C++] 정산소 (0) | 2022.06.05 |
[BOJ 5547 // C++] 일루미네이션 (0) | 2022.06.05 |
[BOJ 4351 // C++] Hay Points (0) | 2022.06.05 |