오랜만에 수학 문제 푸는듯한 기분이 들었다...
사실 수학문제라고 하기도 민망할정도로 간단하게 풀 수 있다.
점 (x , y) 가 직사각형까지 최소값이 될 수 있는 거리의 경우를 모두 생각해야한다.
- 점 (x , y)는 직사각형 안에 있다. (1 ≤ x ≤ w-1, 1 ≤ y ≤ h-1)
발그림으로 설명해보았다. 내가 생각한 최소값의 거리는 총 6가지이다.
보통 직선과 점사이의 최솟값을 구할때는 수직선을 내려서 구한다.
import java.util.Arrays;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//좌표 입력
double x = sc.nextInt();
double y = sc.nextInt();
double w = sc.nextInt();
double h = sc.nextInt();
//가능한 경우의 거리 구하기
double distance[] = new double[6];
distance[0]=x;//y축까지의 거리
distance[1]=y;//x축까지의 거리
distance[2]= (y-h)>0 ? y-h : -(y-h);//직사각형 윗변까지의 거리
distance[3]= (x-w)>0 ? x-w : -(x-w);//직사각형 오른쪽변까지의 거리
distance[4]=Math.sqrt((w-x)*(w-x)+(h-y)*(h-y));//(x,y)와 (w,h)의 거리
distance[5]=Math.sqrt(x*x+y*y);//(x,y)와 원점까지의 거리
Arrays.sort(distance);//오름차순으로 정렬
System.out.print((int)distance[0]);//가장 최솟값 출력
}
}