새소식

💻 Programming (프로그래밍)/C++ | 백준

[C++][백준] - 폰 노이만 (9469번)

  • -
https://www.acmicpc.net/problem/9469
 

9469번: 폰 노이만

250마일 길이의 철로 양 끝에 두 기차 A와 B가 있다. A는 시속 10마일, B는 시속 15마일로 서로를 향해 출발했다. 두 기차의 출발과 동시에 기차 A 앞에 붙어있던 파리 한 마리가 기차가 충돌할 때 까

www.acmicpc.net

🔔 문제 : 

처음에는 이해하기 난해한 문제였습니다. 근데 유명한 일화이더라구요.

 

D란 철로의 길이에서 양쪽 반대편에서 기차가 각각 A,B의 속력으로 서로 마주보며 다가오는데

 

그 사이의 파리가 시속 F 동안 기차 사이를 움직 일 수 있는데, 어느정도 거리를 이동하는지 출력하는 문제입니다.

 

 

이 문제를 어떻게 놓고 보면, 기차가 충돌하기 전 까지 파리가 얼마동안 날고있는지를 보면 되는 것을 알게 됐습니다.


🔔 Kick Point :

float으로 하면, 계산 시 오류가 일어났습니다. 대신 double형을 사용하니 잘 작동하더군요.

 

우선, 파리가 어느정도 날고 있는지를 확인하면 되는데 

거리 / (두 기차가 다가오는 속력) 을 구하면 시간을 구할 수 있습니다.

 

이때, 시간 * 파리의 속력을 구하면, 파리의 이동거리를 구할 수 있습니다.


🔔 Code :

#include <iostream>
using namespace std;

int main() {
	int p; cin >> p;

	while (p--) {
		int n; 
		double d, a, b, f;
		cin >> n >> d >> a >> b >> f;
		double time = d / (a + b);
		
		cout << fixed;
		cout.precision(6);
		cout << n << ' ' << f * time << '\n';
	}
}

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.