Competition/Baekjoon
[백준] 11662번 자바 민호와 강호
bisi
2020. 3. 29. 20:54
문제 출처
https://www.acmicpc.net/problem/11662
11662번: 민호와 강호
민호와 강호가 2차원 좌표 평면 위에 있다. 민호는 점 A(Ax, Ay)에서 점 B(Bx, By)를 향해 걸어가고 있고, 강호는 점 C(Cx, Cy)에서 점 D(Dx, Dy)를 향해 걸어가고 있다. 민호와 강호는 동시에 출발하고, 민호가 점 B에 도착하는 순간 강호도 점 D에 도착한다. 또, 두 사람은 항상 일정한 속도로 걸어간다. 두 사람의 거리가 가장 가까울 때, 거리를 구하는 프로그램을 작성하시오. 두 점 (x1, y1), (x2, y2)사이의 거리
www.acmicpc.net
접근 방식 및 풀이
- 삼분탐색 이나 미분으로 해결할 수 있지만, 삼분탐색을 이용하여 해결하였다.
- 아래 블로그를 참고하여 삼분탐색을 통해 해결하였다.
https://mslim8803.tistory.com/13
백준(BOJ) 11662 : 민호와 강호 (JAVA)
문제링크 : https://www.acmicpc.net/problem/11662 11662번: 민호와 강호 민호와 강호가 2차원 좌표 평면 위에 있다. 민호는 점 A(Ax, Ay)에서 점 B(Bx, By)를 향해 걸어가고 있고, 강호는 점 C(Cx, Cy)에서 점 D..
mslim8803.tistory.com
소스 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double aX1 = sc.nextDouble();
double aY1 = sc.nextDouble();
double aX2 = sc.nextDouble();
double aY2 = sc.nextDouble();
double cX1 = sc.nextDouble();
double cY1 = sc.nextDouble();
double cX2 = sc.nextDouble();
double cY2 = sc.nextDouble();
// 오차가 10의 -6승까지
int interval = 1000000;
double aDX = (aX2-aX1)/interval;
double aDY = (aY2-aY1)/interval;
double cDX = (cX2-cX1)/interval;
double cDY = (cY2-cY1)/interval;
//시작점의 거리
double min = getDistance(aX1, aY1, cX1, cY1);
for (int i = 1; i <=interval ; i++) {
double tmp = getDistance(aX1 + aDX*i, aY1+ aDY*i, cX1+cDX*i, cY1+cDY*i);
if(tmp < min){
min = tmp;
}
}
System.out.println(min);
}
public static double getDistance(double x1, double y1, double x2, double y2){
return Math.sqrt(Math.pow(x2-x1, 2) + Math.pow(y2-y1, 2));
}
}
결과