백준 1085, 직사각형에서 탈출
2021. 10. 22. 17:13ㆍCodingTest
문제
https://www.acmicpc.net/problem/1085
문제요약
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));
}
}
'CodingTest' 카테고리의 다른 글
[코딩테스트][다이나믹프로그래밍][Java] 백준 14501, 퇴사 (0) | 2022.01.27 |
---|---|
백준 17298, 오큰수 (0) | 2022.01.03 |
백준 4948, 베르트랑 공준 (0) | 2021.10.21 |
백준 1929, 소수 구하기 (0) | 2021.10.21 |
백준 11053, 가장 긴 증가하는 부분 수열 (0) | 2021.10.14 |