[ Baekjoon ] 1085번 ( Bronze III ) : 직사각형에서 탈출 (Java)

ma.caron_g·2021년 12월 24일
0
post-thumbnail

1. Problem 📃

[ 직사각형에서 탈출 ]

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


[ 문제 ]

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


2. Input 📇

[ 입력 ]

첫째 줄에 x, y, w, h가 주어진다.


3. Output 📠

[ 출력 ]

첫째 줄에 문제의 정답을 출력한다.


4. Constraint 🔗

[ 제한 ]

  • 1 ≤ w, h ≤ 1,000
  • 1 ≤ x ≤ w-1
  • 1 ≤ y ≤ h-1
  • x, y, w, h는 정수

5. Example 📚

[ 입출력 예시 ]

예제 입력예제 출력
6 2 10 31
1 1 5 51
653 375 1000 1000347
161 181 762 375161

6. Solution 🔑

이번 문제는 본인이 직접 좌표평면에 한수 위치를 표시하고 사각형을 표시해서 어디가 가장 최단거리일지 확인하면 접근하기 쉽다.


1. 한수의 위치 좌표 x, y와 사각형의 가로 세로 길이 w, h 값을 변수(x, y, w, h)에 담아준다.


2. 한수와 사각형 변까지의 거리를 담아줄 변수(dist1)와 한수가 (0, 0)변들로 탈출할 변수(dist)를 선언하여 dist1에는 한수 x좌표와 사각형 가로 길이 w와 한수 y좌표와 사각형 높이 h의 거리중 짧은 값을 dist1에 삼항 연산자로 담아주었다.


3. 한수와 (0, 0)변들과의 거리 x와 y중 짧은 거리를 dist에 삼항 연산자로 담아주었다.
이중 작은 값을 min에 삼항 연산자로 비교하여 담아 출력해주었다.

Math.min()을 이용할 수도 있다.


7. Code 💻

[ 삼항 연산자를 이용한 풀이 ]

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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());
        
        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 dist1 =  w - x < h - y ? w - x : h - y;
        int dist = x < y ? x : y;
        
        int min = dist < dist1 ? dist : dist1;
        System.out.println(min);
        
	}
        
}

[ Math.min()을 이용한 풀이 ] - 풀이 시간이 더 짧지만 메모리가 좀 더 발생함.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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());
        
        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 dist1 =  Math.min(w - x, h - y);
        int dist = Math.min(x, y);
        
        int min = Math.min(dist, dist1);
        System.out.println(min);
        
	}
        
}
profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글