백준 1085, 직사각형에서 탈출

2021. 10. 22. 17:13CodingTest

문제

https://www.acmicpc.net/problem/1085

 

1085번: 직사각형에서 탈출

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

www.acmicpc.net

 

문제요약

1. (0,0), (w,h) 두점으로 만들어지는 직사각형에 내에 존재하는 (x,y)라는 점이 직사각형의 경계선까지 가기 위해서 필요한 최솟값(가로 또는 세로)을 구하시오.

 

문제풀이

예를 들어 x,y,w,h의 값이 6,2,10,3일때 그래프는 다음과 같이 생성된다.

(x,y) 점이 직사각형안에 존재할때 어떤 방향이든 상관없이 (0,0) (w,h) 두점이 만든 직사각형 경계선까지의 거리가 최솟값을 찾으면 됩니다. 이때 위와 같이 (x,y)가 경계선에 닿을 수 있는 거리는 상(1), 하(2), 좌(6), 우(4)입니다. 상하좌우의 거리중 최솟값은 상(1)이므로 답은 1이 됩니다.

따라서 위와 같이 상,하,좌,우의 거리값을 4개 구한후 최솟값을 구하면 이 문제의 답이 될 것입니다.

 

소스코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class Main {
	
	public static int solution(int x, int y, int w, int h)
	{
		return Math.min(Math.min(Math.min(w-x, x),h-y),y);
	}
	
	public static void main(String args[]) throws IOException
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String str[] = br.readLine().split(" ");
		int x = Integer.parseInt(str[0]);
		int y = Integer.parseInt(str[1]);
		int w = Integer.parseInt(str[2]);
		int h = Integer.parseInt(str[3]);
		System.out.println(solution(x, y, w, h));
	}
}