[백준 1085번: 직사각형에서 탈출] java 풀이

Elmo·2022년 8월 4일
0

[백준] 알고리즘

목록 보기
23/39

🔔기하1 - 직사각형에서 탈출

오랜만에 수학 문제 푸는듯한 기분이 들었다...
사실 수학문제라고 하기도 민망할정도로 간단하게 풀 수 있다.

점 (x , y) 가 직사각형까지 최소값이 될 수 있는 거리의 경우를 모두 생각해야한다.

  • 점 (x , y)는 직사각형 안에 있다. (1 ≤ x ≤ w-1, 1 ≤ y ≤ h-1)

발그림으로 설명해보았다. 내가 생각한 최소값의 거리는 총 6가지이다.

  • y축까지의 거리
  • x축까지의 거리
  • 원점까지의 거리
  • (w , h)까지의 거리
  • 직사각형 윗변(y=h)까지의 거리
  • 직사각형 오른쪽변(x=w)까지의 거리

보통 직선과 점사이의 최솟값을 구할때는 수직선을 내려서 구한다.

🔑 java 풀이

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]);//가장 최솟값 출력
	}
}
profile
엘모는 즐거워

0개의 댓글