C++ - 백준 9469 폰 노이만
2025. 1. 30. 18:05ㆍC_C++
728x90
반응형
/* 백준 9469 폰 노이만
* 문제
250마일 길이의 철로 양 끝에 두 기차 A와 B가 있다. A는 시속 10마일, B는 시속 15마일로
서로를 향해 출발했다. 두 기차의 출발과 동시에 기차 A 앞에 붙어있던 파리 한 마리가 기차가
충돌할 때 까지 시속 20마일로 두 기차를 사이를 왔다갔다 한다. 이때, 파리가 이동한 거리는
몇 마일일까?
폰 노이만은 문제를 듣자마자 머리속으로 무한 급수를 이용해 계산한 다음 1초도 지나지 않은
시간에 200 마일이라고 대답했다.
철로의 길이 D, 두 기차 A, B의 속도와 파리의 속도 F가 주어졌을 때, 위 문제의 답을 구하는
프로그램을 작성하시오.
* 입력
첫째 줄에 테스트 케이스의 개수 P (1 ≤ P ≤ 1000)가 주어진다.
각 테스트 케이스는 다섯 숫자 N, D, A, B, F이루어져 있다. N은 테스트 케이스의 번호이고,
D는 철로의 길이 (10 ≤ D ≤ 1000), A와 B는 두 기차의 속도 (1 ≤ A, B ≤ 40),
F는 파리의 속도 (A ≤ B < F ≤ 50)이다. D, A, B, F는 실수이다. 실수는 최대 소수점
둘째자리까지 주어진다.
* 출력
각 테스트 케이스마다 테스트 케이스 번호를 출력하고, 두 기차가 충돌할 때까지 파리가 움직인
거리를 출력한다. 절대 오차는 10-2까지 허용한다.
* 예제 입력 1
5
1 250 10 15 20
2 10.7 3.5 4.7 5.5
3 523.7 15.3 20.7 33.3
4 1000 30 30 50
5 500 15 15 25
* 예제 출력 1
1 200.000000
2 7.176829
3 484.422500
4 833.333333
5 416.666667
*/
/* 풀이
이 문제는 실제로 무한 급수를 사용하지 않아도 해결할 수 있습니다. 기차가 충돌하기까지의
시간을 구하고, 파리가 그 시간 동안 이동한 거리를 계산하면 됩니다.
1. 기차가 충돌할 때까지의 시간 계산:
기차 A의 속도: 10 마일/시간
기차 B의 속도: 15 마일/시간
철로의 길이: 250 마일
두 기차는 서로를 향해 달리기 때문에 두 기차의 속도를 더한 속도로 접근합니다:
합속도: 10 + 15 = 25 마일/시간
두 기차가 충돌할 때까지 걸리는 시간은 철로의 길이를 합속도로 나눈 값입니다:
(속도 = 거리 / 시간 ==> 시간 = 거리 / 속도)
시간 = 250 마일 / 25 마일/시간 = 10 시간
2. 파리가 이동한 거리 계산:
파리는 어차피 파리의 속도로 계속 이동하기 때문에 충돌할 때까지의 시간만큼 얼마나
이동했는지만 계산하면 됩니다.
파리의 속도: 20 마일/시간
두 기차가 충돌할 때까지의 시간: 10 시간
V 따라서 파리가 이동한 거리는 파리의 속도와 시간을 곱하면 됩니다:
(거리 = 속도 × 시간)
거리 = 20 마일/시간 × 10 시간 = 200 마일
*/
#include <iostream>
#include <iomanip>
using std::cin, std::cout;
int main() {
int t;
cin >> t;
while (t-- > 0) {
int n;
double d, a, b, f;
cin >> n >> d >> a >> b >> f;
double time = d / (a + b);
double distance = time * f;
cout << std::fixed << std::setprecision(6);
cout << n << ' ' << distance << '\n';
}
}
728x90
반응형
'C_C++' 카테고리의 다른 글
C++ - 백준 11320 삼각 무늬 - 1 (0) | 2025.01.31 |
---|---|
C++ - 백준 9501 꿍의 우주여행 (0) | 2025.01.30 |
C++ - 백준 5691 평균 중앙값 문제 (0) | 2025.01.30 |
C++ - 백준 3035 스캐너 (0) | 2025.01.30 |
C++ - 백준 3004 체스판 조각 (0) | 2025.01.30 |