티스토리 뷰

생각

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);
        }
    }
}

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday