백준 1085번 : 직사각형에서 탈출[Java]

문제 출처

www.acmicpc.net/problem/1085

 

1085번: 직사각형에서 탈출

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

www.acmicpc.net

직사각형의 경계는 사방으로 있고 x와 y중 더 가까운 쪽으로 가야한다고 생각했다.

만약 x와 y가 w와 h를 2로 나눴을때 보다 크면 w - x, h - y와 같이 답을 구하고

작으면 왼쪽과 아래쪽 경계로 가는 것이 빠르므로 x와 y자체가 길이가 될 것이다.

각각 x방향과 y방향으로 가는 거리를 구하고 더 짧은 쪽을 선택했다.

import java.util.Scanner;
public class d022_Q1085 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int x = sc.nextInt();
		int y = sc.nextInt();
		int w = sc.nextInt();
		int h = sc.nextInt();
		
		int d1, d2;
		if(x >= w / 2) {d1 = w - x;}
		else {d1 = x;}
		
		if(y >= h / 2) {d2 = h - y;}
		else {d2 = y;}
		
		int rslt;
		if(d1 >= d2) {rslt = d2;}
		else {rslt = d1;}
		System.out.println(rslt);
		sc.close();

	}
}

 

틀렸다. 반레가 뭐가 있을까했는데

문제의 예제에 떡하니 반례가 있었다. w나 h가 3일때

3 / 2 는 1인데 x나 y가 1이면 x >= w / 2에 걸려서 길이가 2가 되버린다.

 

이걸 보고나니 생각해보니 굳이 2로 나눌 필요가 없지않나 하는 생각이 번뜩

그냥 x와 w - x를 처음부터 비교하면 되는거였다.

import java.util.Scanner;
public class d022_Q1085 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int x = sc.nextInt();
		int y = sc.nextInt();
		int w = sc.nextInt();
		int h = sc.nextInt();
		
		int d1, d2;
		if(x >= w - x) {d1 = w - x;}
		else {d1 = x;}
		
		if(y >= h - y) {d2 = h - y;}
		else {d2 = y;}
		
		int rslt;
		if(d1 >= d2) {rslt = d2;}
		else {rslt = d1;}
		System.out.println(rslt);
		sc.close();

	}
}

 

맞았다.

myoskin