[백준알고리즘] 1085번 직사각형에서 탈출

2024. 1. 17. 08:40백준알고리즘/수학

728x90

문제출처 : https://www.acmicpc.net/problem/1085

 

1085번: 직사각형에서 탈출

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

www.acmicpc.net


알고리즘 분류 : 수학

언어: JAVA


문제

 


몰랐던 점

- 일단 좌표간 거리를 구하는 방법을 알수 없어서 검색해봄

 

접근

- (x,y)좌표가 주어졌을 때 (w,h)좌표 경계선까지의 최솟값

- XX: x (수평 0부터 x까지의 거리)

- YY: y (수직 0부터 y까지의 거리)

- WX: w-x ( x부터 w까지 수평 거리)

- HY: h-y ( y부터 h까지 수직 거리)

- XX, YY, WX, HY 중 최솟값을 구하는 문제


코드

package org.example.question.수학;

import java.util.Arrays;
import java.util.Scanner;

/*
* 문제: 한수는 지금 (x, y)에 있다.
*      직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다.
*      직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오.
* 입력: 첫째 줄에 x, y, w, h가 주어진다.
* 출력: 첫째 줄에 문제의 정답을 출력한다.
* */
public class Q1085 {
    public static void main(String[] args) {
        //(x,y) 좌표에서 (w,h)좌표의 경계선까지 최솟값
        //[WX] x부터 w경계선 까지 수평(가로)거리 :: (w-x)
        //[HX] y부터 h경계선 까지 수직(세로)거리 :: (h-x)
        // [X] 와 [Y] 중 최솟값을 출력

        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        int y = sc.nextInt();
        int w = sc.nextInt();
        int h = sc.nextInt();

        int XX = x;
        int YY = y;
        int WX = w - x;
        int HX = h - y;

        int[] intArr = new int[]{XX, YY, WX, HX};

        int rslt = Arrays.stream(intArr).min().getAsInt();
        System.out.println(rslt);
    }
}

참고 : https://nyol.tistory.com/124

728x90