본문 바로가기
Problem Solving/SWEA

[SWEA] 6019. 기차 사이의 파리

by 테리는당근을좋아해 2020. 2. 24.

문제

궁금증이 많은 한 소녀는 존 폰 노이만(John von Neumann)에게 다음과 같은 문제를 질문했다.

“두 기차 A, B가 서로를 향해 달리고 있다. 두 기차의 전면부는 250마일 떨어져 있고 기차 A는 시속 10마일, B는 시속 15마일로

달리고 있다.

파리가 기차 A의 전면부에서 기차 B로 시속 20마일의 속력으로 날아간다. 파리가 기차 B의 전면부에 닿으면 바로 방향을 바꿔

기차 A를 향해 같은 속력으로 날아간다.

그러다 기차 A와 B가 충돌하면 파리는 죽을 것이다. 파리는 죽기 전 까지 몇 마일의 거리를 이동했을까?”



폰 노이만은 소녀의 질문에 대해 즉시 무한 급수를 이용해 답이 200마일이라는 것을 계산해냈다.

소녀가 질문한 문제의 조금 더 일반화된 버전을 해결해보자.

 

풀이방법

1) 파리와 기차 B가 닿는 순간의 시간(s1)를 구한다. ( s1 = D / (B + F))

 

2) 파리가 기차 B와 닿는 순간의 기차 A와 파리의 거리(d1)을 구한다 (d1 = F * s1 - A * s1)

 

3) 파리가 다시 기차 B의 속력으로 기차 A와 닿는 순간의 (s2)를 구한다 (s2 = d1 / (A + B))

 

4) 파리의 총 이동거리는 B를 향해 이동했던 (F * s1)과 B와 닿아 다시 A를 향해 이동했던(B * s2)이다.

 

소스코드

package samsung;

import java.util.*;

public class s_6019 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int test = sc.nextInt();
		
		for(int t = 1; t <= test; t++) {
			double d = sc.nextDouble();
			double a = sc.nextDouble();
			double b = sc.nextDouble();
			double f = sc.nextDouble();
			double s1 = d / (b + f);
			double d1 = f * s1 - a * s1;
			double s2 = d1 / (a + b);
			
			double result = f * s1 + f * s2;
			
			System.out.printf("#%d %.10f",t,result);
		}
	}
}

 

출처

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWajaTmaZw4DFAWM&categoryId=AWajaTmaZw4DFAWM&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

댓글