1 minute read




문제 풀이


이번 문제는 따로 특정한 알고리즘을 활용할 필요가 없을 정도로 쉽다.

위 이미지와 같이 현재 한수의 위치 (X,Y)에서 직사각형을 벗어나기 위한 최소거리를 구하면 된다.
상, 하, 좌, 우로 움직여 직사각형을 벗어날 수 있는데, 결국 X, W-X, Y, H-Y 중에서 가장 작은 수가 최소거리가 된다.

아이디어 도출

  • X, Y, W, H 를 입력받는다.
  • 직사각형에서 벗어날 수 있는 상(H-Y), 하(Y), 좌(X), 우(W-X) 중에서 가장 최소값을 구한다.

아이디어를 이해하기는 쉬우니 바로 코드를 작성해보자.

1
2
3
4
5
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());

공백을 기준으로 X, Y, W, H를 입력아 변수에 저장한다.

1
2
3
4
int min_X = Math.min(X, W-X);
int min_Y = Math.min(Y, H-Y);

bw.write(Math.min(min_X, min_Y)+"\n");

위에서 언급한 상(H-Y), 하(Y), 좌(X), 우(W-X) 값들을 비교하여 가장 최소가 되는 수가 최소거리가 되기에 최소거리를 출력하면 된다.



작성코드


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
import java.io.*;
import java.util.*;

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());
        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_X = Math.min(X, W-X);
        int min_Y = Math.min(Y, H-Y);

        bw.write(Math.min(min_X, min_Y)+"\n");


        bw.flush();
        bw.close();
        br.close();
    }
}

회고

  • 특별한 알고리즘 없이 단순 구현만으로 해결할 수 있는 문제였다.

출처

  • 해당 문제의 저작권은 문제를 만든이에게 있으며 자세한 내용은 문제 링크에서 참조바랍니다.
  • 좌표 이미지 출처