본문 바로가기

IT/JAVA

백준 코딩 1085 : 직사각형에서 탈출

반응형

문제

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

입력

첫째 줄에 x y w h가 주어진다. w와 h는 1,000보다 작거나 같은 자연수이고, x는 1보다 크거나 같고, w-1보다 작거나 같은 자연수이고, y는 1보다 크거나 같고, h-1보다 작거나 같은 자연수이다.

출력

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

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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));
        String str = br.readLine();
        StringTokenizer st = new StringTokenizer(str);
        int num1 = 0;
        int num2 = 0;
        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 rangeUp = h - y;
        int rangeDown = y;
        int rangeLeft = x;
        int rangeRight = w - x;
        if (rangeLeft < rangeRight) {
            num1 = rangeLeft;
            if (rangeUp < rangeDown) {
                num2 = rangeUp;
            }else if (rangeUp > rangeDown) {
                num2 = rangeDown;
            }else {
                num2 = rangeUp;
            }
 
            if (num1 > num2) {
                System.out.println(num2);
            } else {
                System.out.println(num1);
            }    
 
        } else if (rangeLeft >= rangeRight) {
            num1 = rangeRight;
            if (rangeUp < rangeDown) {
                num2 = rangeUp;
            }else if (rangeUp > rangeDown) {
                num2 = rangeDown;
            }else {
                num2 = rangeUp;
            }
 
            if (num1 > num2) {
                System.out.println(num2);
            } else {
                System.out.println(num1);
            }    
        } 
    }
}
cs

 

현재 한수가 있는 위치를 (X,Y)라고 하면 동,서,남,북 중 제일 짧은 길을 선택해서 가면 된다.

비교방법은 순서의 차이가 있겠으나 나같은 경우에는 동, 서를 비교하여 작은 값을 num1로 초기화하고

남, 북을 비교하여 작은 값을 num2로 초기화해 num1과 num2중 작은 값을 출력하도록 작성하였다.

단순히 좌우 방향이 아니라 대각선으로 가는 방법도 고려해볼 수 있겠으나 대각선으로 가는 길은 짧은 경로로

선택된 횡방향 혹은 종방향 길이보다 무조건 길기 때문에 고려하지 않아도 된다.

반응형

'IT > JAVA' 카테고리의 다른 글

백준 코딩 10773 : 제로  (0) 2020.09.13
백준 코딩 2108 : 통계학  (0) 2020.09.11
백준 코딩 4948 : 베르트랑 공준  (0) 2020.09.08
백준 코딩 7568 : 덩치  (0) 2020.09.06
백준 코딩 15652 : 백트래킹 (N과 M 4)  (0) 2020.09.05