Coding/백준 온라인 저지 (Baekjoon Online Judge)
백준 온라인 저지 (Baekjoon Online Judge) - 1085번 : 직사각형에서 탈출
_Woo_
2019. 10. 13. 23:54
https://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
직사각형의 한 쪽 끝은 (0, 0)이고, 다른 한 쪽 끝은 (w, h)이다.
이 때, 현재 점의 위치를 (x, y)라고 하는데,
직사각형의 한 변으로 가는 최소의 거리를 구하는 것이 문제의 핵심이다.
처음 이 문제를 풀려고 생각을 해 보았을 때,
직사각형을 가로, 세로 기준으로 각각 2등분,
따라서 총 4개의 작은 직사각형이 나오도록 자르고
그 때 그 영역에 따라서 if-else 구문으로 코드를 작성하려고 하였다.
위와 같은 방식으로 코드를 작성하려고 하였으나,
x = w / 2 또는 y = h / 2와 같은 경우 또 추가적인 코드를 작성하여야 하고,
저기에 있는 res의 값 또한 정확한 값이 아닐 수 있기 때문에
코드를 다시 작성해야겠다고 생각을 하였다.
위의 그림을 보면, 점 (x, y)로부터
직사각형의 변까지의 모든 거리를 x, y, w, h를 통해서 값을 표현할 수 있다.
따라서, 저 4가지 값 중에서 제일 작은 값을 출력하면 된다.
코드는 아래와 같다.
#include <iostream>
using namespace std;
int main() {
int x, y, w, h;
cin >> x >> y >> w >> h;
int arr[4];
arr[0] = x;
arr[1] = y;
arr[2] = w - x;
arr[3] = h - y;
int min = arr[0];
for (int i = 1; i < 4; i++) {
if (min > arr[i])
min = arr[i];
}
cout << min;
}