BOJ 1085번 직사각형에서 탈출 자바(java) 풀이
문제정리
- 지금 현재 위치는 (x,y) 이고 직사각형의 왼쪽 아래 위치는 (0,0)이다.
- 오른쪽 위 꼭지점은 (w,h)에 있다.
- 직사각형 경계선까지 가는 거리의 최소값을 구하는 프로그램을 작성해라.
문제풀이
경계선이란 직사각형의 선 위를 이야기합니다.
예시를 보면 가로 10 세로 3의 크기인 직사각형이 있습니다. 한수는 (6,2)에 있으므로 위쪽 (6,3)으로 가면 직사각형 위에 있게됩니다.
즉 1만 이동하면 선 위에 있을 수 있습니다.
그림을 한 번만 그려보면 쉽게 알 수 있습니다.
- 높이(위, 아래 직사각형 선)와 너비선(양 옆 직사각형 선)을 따로 따져줍니다.
- 높이
2.1 현 위치의 y좌표가 높이의 절반 보다 작은 경우에 아래로 가는 최소 거리는 y좌표 입니다. 당연히 높이의 중간 위치보다 아래에 있다면 아래 선과 더 가깝습니다.
아래 선의 y좌표는 0이므로 가까운 거리는 'y 좌표'가 됩니다.
2.2 현 위치의 중간 위치보다 큰 경우 위쪽 선으로 가는 최소 거리는 'h-y' 입니다. 높이의 중간 위치보다 위라면 위쪽 직사각형 선에 더 가깝습니다.
위쪽 선의 y좌표는 h이고 현 위치의 y좌표는 'y'이므로 최속 ㅓ리는 'h-y'가 됩니다.
- 너비
3.1 현 위치의 x좌표가 너비의 절반 보다 작다면 왼쪽 선과 가깝다. 이도 2.1과 같습니다.
3.2 현 위치의 y좌표가 너비의 절반 보다 크다면 오른쪽 선과 가깝습니다. 이도 2.2와 같습니다.
- 너비와 가까운 거리, 높이와 가까운 거리를 구했다면 두 수를 비교하여 더 작은 수를 출력합니다.
1085번 직사각형에서의 탈출 자바 코드