티스토리 뷰
생각
Github - https://github.com/hellojdh/Code/blob/master/src/swexpert/d3/Q6019.java 기차 A,B가 A,B의 속력으로 서로를 향해 달리고 있으며, 파리가 A기차 시작점에있다. D A B F가 주어진다. D는 기차 사이의 거리 A는 A기차의 속력 B는 B기차의 속력 F는 그 사이에 있는 파리의 속력이다. A 기차에서 출발한 파리는 B기차에 닿을 때까지 F의 속력으로 이동한 후, 다시 A기차를 향해 날아간다. 그리고 A 기차에 닿으면 다시 B기차를 향해 날아간다. A,B 기차가 만나서 파리가 죽을 때까지 파리가 이동한 거리를 구하여라.
처음 생각
파리가 죽는다니! 끔찍한 문제지만 문제를 간단하게 생각하면 끔찍하지만은 않은 문제다.
▶ 수학적인 접근을 해야하는 문제들은 간단한 것 같으면서도 어렵다.
다음 생각
문제에서 다음과 같은 용어가 있다. <무한 급수> 급수를 배운지도 오래지났고 등비 등차의 공식도 곧바로 기억이 나지 않는다.
▶ 그래서 문제에서 힌트로 일반화된 버전을 구해보라고 준 것 같다.
다다음 생각
간단하게 생각해보면 A,B 기차가 만나기 전까지 파리가 F의 속력으로 날아다니면 된다. 그래도 아직 까먹지 않은 공식이 있다. [거리 = 속력 * 시간] 이다. 이 식을 변형해서 구할 수 있는건 다음과 같다.
▶ 거리 = 속력 * 시간
▶ 속력 = 거리 / 시간
▶ 시간 = 거리 / 속력
다다다음 생각
문제에서 거리와 속력이 주어졌기 때문에 위의 공식들을 사용해서 문제를 풀어보자.
▶ [시간 = 거리 / 속력]
▶ 우선 기차의 속력 A,B를 총 거리 D로 나누면 D/(A+B) 가 되고 이는 각 기차가 만나기 전까지의 시간이 된다.
▶ [거리 = 속력 * 시간]
▶ 파리가 날아다니는 시간은 각 기차가 만나기 전까지이다. 즉, 각 기차가 이동한 시간동안 파리가 날라다닐 수 있는것이다. 이를 공식에 대입해서 [파리가 날라다닌 시간 = 파리 속력 * 기차가 만나기까지 시간] 으로 간략히 할 수 있다.
다다다다음 생각
예시로 주어진 답이 200.000000로 소수 6번째 자리 까지이므로 printf를 이용해 출력해주었다.
▶
1 | System.out.printf("#%d %.6f\n",i,result); |
방안
1) Java 풀이
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import java.util.Scanner; public class Solution { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int tc = sc.nextInt(); for(int i=1;i<=tc;i++){ int d = sc.nextInt(); double a = sc.nextDouble(); double b = sc.nextDouble(); double f = sc.nextDouble(); double mok = d/(a+b); double result = mok*f; System.out.printf("#%d %.6f\n",i,result); } } } |
'알고리즘 > SW Expert' 카테고리의 다른 글
[SW Expert] 6731. 홍익이의 오델로 게임 (7) | 2019.01.14 |
---|---|
[SW Expert] 3752. 가능한 시험 점수 (0) | 2019.01.13 |
[SW Expert] 5789. 현주의 상자 바꾸기 (0) | 2018.12.16 |
[SW Expert] 5948. 새샘이의 7-3-5 게임 (0) | 2018.12.16 |
[SW Expert] 6190. 정곤이의 단조 증가하는 수 (0) | 2018.12.15 |
- Total
- Today
- Yesterday