JAVA/JAVA Algorithm

[백준] 1085 직사각형에서 탈출

오늘의 진 2022. 8. 21. 18:17

문제

한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 x, y, w, h가 주어진다.

출력

첫째 줄에 문제의 정답을 출력한다.

제한

  • 1 ≤ w, h ≤ 1,000
  • 1 ≤ x ≤ w-1
  • 1 ≤ y ≤ h-1
  • x, y, w, h는 정수

 

 

(구상)

좌표축을 생각했을때 

 다음과 같은 형태로 좌표가 존재한다고 생각하자. 

그러면 최단거리는 점(x,y)가 x축가 만나는 거리 , 

y축과 만나는거리, 직사각형의 나머지 가로 또는 세로와 만나는 거리를 고려해 주면 된다. 

이들 네가지를 구하여 최솟값을 출력해 주면 된다. 

 

 

 

 

 

 

1.x축과의 거리 : x

2.y축과의 거리 : y 

3.축에 닿지 않은 가로까지의 거리 :   w-y 

4.축에 닿지 않은 세로 까지의 거리 :  k-x 

 

코드

package codingTest;
// 백준 1085 직사각형 탈출 문제 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Algorithm9 {

	static int disteance(int x, int y, int w, int h) {

		int arr[] = { x, y, w - x, h - y };
		Arrays.sort(arr);

		return arr[0];

	}

	public static void main(String[] args) throws Exception {

		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

		StringTokenizer st = new StringTokenizer(bf.readLine());

		System.out.println(disteance(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()),
				Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())));

	}

}