[Java] 백준(브론즈-3) 1085번 - 직사각형에서 탈출


문제 풀이
이번 문제는 따로 특정한 알고리즘을 활용할 필요가 없을 정도로 쉽다.
위 이미지와 같이 현재 한수의 위치 (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();
}
}
회고
- 특별한 알고리즘 없이 단순 구현만으로 해결할 수 있는 문제였다.