https://www.acmicpc.net/problem/1085
직사각형의 한 쪽 끝은 (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;
}
'Coding > 백준 온라인 저지 (Baekjoon Online Judge)' 카테고리의 다른 글
백준 온라인 저지 (Baekjoon Online Judge) - 10809번 : 알파벳 찾기 (0) | 2019.10.14 |
---|---|
백준 온라인 저지 (Baekjoon Online Judge) - 9325번 : 얼마? (0) | 2019.10.14 |
백준 온라인 저지 (Baekjoon Online Judge) - 16479번 : 컵라면 측정하기 (0) | 2019.10.14 |
백준 온라인 저지 (Baekjoon Online Judge) - 10833번: 사과 (0) | 2019.10.09 |
백준 온라인 저지 (Baekjoon Online Judge) - 11441번 : 합 구하기 (0) | 2019.07.12 |