현재 좌표 (x, y)에 있는 점이
직사각형 안에서 경계선까지 최소 몇 단위로 움직이면 탈출할 수 있는지를 구하는 문제입니다.
항목 | 내용 |
---|---|
문제 번호 | 1085번 - 직사각형에서 탈출 |
난이도 | 브론즈 3 |
주요 알고리즘 | 수학, 절댓값, 거리 비교 |
(0, 0)
부터 (w, h)
까지 직사각형이 존재(x, y)
는 이 직사각형 내부에 있음1️⃣ 상하좌우 네 방향 경계까지의 거리 계산
2️⃣ 왼쪽 = x
, 오른쪽 = w - x
, 아래 = y
, 위 = h - y
3️⃣ 위 4개의 거리 중 최소값을 출력
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
// 고속 입력/출력 객체
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 입력된 한 줄을 공백 기준으로 나눔
StringTokenizer st = new StringTokenizer(br.readLine());
// 현재 점의 좌표 (x, y)
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
// 직사각형의 오른쪽 위 꼭짓점 (w, h)
int w = Integer.parseInt(st.nextToken());
int h = Integer.parseInt(st.nextToken());
// 왼쪽 경계까지 거리
int toLeft = x;
// 오른쪽 경계까지 거리
int toRight = w - x;
// 아래쪽 경계까지 거리
int toBottom = y;
// 위쪽 경계까지 거리
int toTop = h - y;
// 최소 거리 계산
int result = Math.min(Math.min(toLeft, toRight), Math.min(toBottom, toTop));
// 결과 출력
bw.write(String.valueOf(result));
bw.newLine();
bw.flush();
bw.close();
br.close();
}
}
항목 | 설명 |
---|---|
거리 비교는 Math.min() 중첩 사용 | 좌우, 상하 중 각각 최소 → 두 그룹 중 최소 |
음수 가능성 없음 | 항상 0 ≤ x ≤ w , 0 ≤ y ≤ h 조건 보장 |
좌표 단위는 정수 | 실수 계산 없음, int로 충분 |
✔️ 네 방향의 경계선까지 거리를 모두 계산해야 합니다.
✔️ 좌우/상하 중 최소 거리를 구해 탈출까지의 최소 거리를 계산합니다.
✔️ 단순하지만 조건 누락 없이 처리하는 것이 포인트입니다.