본문 바로가기
백준

[백준] 1085번 : 직사각형에서 탈출 – JAVA [자바]

by Hongwoo 2022. 7. 12.
반응형

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

 

1085번: 직사각형에서 탈출

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

www.acmicpc.net

 

 


  • 문제

 

 


  • 문제 풀이

백준 1085번 직사각형에서 탈출은 브론즈 3 난이도의 수학 및 기하학 문제이다. 이 문제에서는 왼쪽 아래 꼭짓점 (0,0)과 오른쪽 위 꼭짓점이 (w, h)인 직사각형이 하나 있다. 그리고 한수는 이 직사각형 안에 (x, y)점에 위치해 있다. 이때 한수가 직사각형 경계선까지 가는 거리의 최솟값을 출력하면 된다.

 

처음에 이 문제를 읽고 보면 조금 어렵게 느껴질 수도 있다. 하지만 이 문제는 간단하다. 이 문제의 상황은 밑에 있는 그림과 같다.

 

 

파란색의 직사각형이 있고 그 직사각형 안에 점 (x, y)가 있다. 이때 경계선과 가장 가까운 거리를 구하면 된다. 즉, 이 점에서 직각으로 이동했을 때 최소의 거리를 구하기만 하면 된다는 것이다. 그림으로 표현하면 다음과 같다.

 

이 거리들은 그림에 나와있는 것처럼 w, h, h - y, w - x이다. 따라서 이 값들의 최솟값을 출력하기만 하면 되는 문제이다.

 

자세한 코드는 밑에 있다.

 


  • 코드

 

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));
        StringTokenizer st = new StringTokenizer(br.readLine());
        // x, y, w, h 입력 받기
        int x = Integer.parseInt(st.nextToken());
        int y = Integer.parseInt(st.nextToken());
        int w = Integer.parseInt(st.nextToken());
        int h = Integer.parseInt(st.nextToken());
        int min = Integer.MAX_VALUE;
        min = Math.min(min, Math.min(x, w-x));
        min = Math.min(min, Math.min (y, h-y));
        System.out.print(min);
    }
}

 

 

반응형

댓글