백준 1085번 : 직사각형에서 탈출[Java]
문제 출처
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();
}
}
맞았다.
'문제풀이 > 코딩테스트' 카테고리의 다른 글
백준 4153번 : 직각삼각형[Java] (0) | 2020.09.25 |
---|---|
백준 3009번 : 네 번째 점[Java] (0) | 2020.09.24 |
백준 9020번 : 골드바흐의 추측[Java] (0) | 2020.09.21 |
백준 4948번 : 베르트랑 공준[Java] (0) | 2020.09.20 |
백준 1929번 : 소수 구하기[Java] (0) | 2020.09.20 |