문제 url:
직사각형에서 탈출
문제
import java.io.*;
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());
if((x-0) <= (w-x) && (x-0) <= (h-y) && (x-0) <= (y-0)) {
System.out.println(x-0);
} else if((y-0) <= (w-x) && (y-0) <= (h-y) && (y-0) <= (x-0)) {
System.out.println(y-0);
} else if((w-x) <= (h-y) && (w-x) <= (y-0) && (w-x)<= (x-0)) {
System.out.println(w-x);
} else {
System.out.println(h-y);
}
}
}
굉장히 복잡하게 짜놨다. 간단하게 설명하면, 출력값에 나와 있는 값이 최솟값이 될 수 있는 경우의 수들을 입력한것으로 해석할 수 있다.
음 역시나 코드가 좋은 코드는 아니다. 그래서 또 비교를 하며 찾아보니,
Math.min이라는 최솟값을 찾아주는 내장함수가 존재한다. 이를 이용해서 코드 리팩토링을 진행해보겠다.
import java.io.*;
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());
// x가 0에 가까운지 혹은 w에 가까운지를 판별하는 작업
int min_x = Math.min(x-0 , w-x);
// y가 0에 가까운지 혹은 h에 가까운지를 판별하는 작업
int min_y = Math.min(y-0 , h-y);
// 나온 값들 중 그 안에서도 가장 가까운 값을 구분해 출력
System.out.println(Math.min(min_x, min_y));
}
}
이렇게 하니 4ms 정도 더 빨라졌긴 했다.
거기에 코드 가독성이 훨씬 좋아졌으며 코드 역시 짧아졌기에 바로 보면 이해할 수 있어졌다.