구역을 네가지로 나눠야 한다
1. x >= w && y >= h
2. x > w && y < h
3. x < w && y > h
4. x < w && y < h
이중에서 4번의 경우를 다시 생각해봐야하는데, 사각형 내부에 점이 있다고 하더라도 그 안에서도
가까이 있는 변이 다를 수도 있으므로
4번에 경우를 만족하더라도
4-1. x <= w-x && x <= h-y && x <= y
4-2. w-x < x && w-x < h-y && w-x < y
4-3. h-y < x && h-y < w-x && h-y < y
4-4. y < x && y < w-x && y < h-y
총 4가지 경우가 나오게 된다.
이거에 맞춰서 계산을 해주게 되면 코드는 다음과 같다.
#include <stdio.h>
#include <math.h>
int solve() {
float x, y, w, h;
scanf("%f %f %f %f", &x, &y, &w, &h);
if(x >= w && y >= h)
printf("%.0f\n", sqrt(pow(x-w, 2) + pow(y-h, 2)));
else if(x > w && y < h)
printf("%.0f\n", x - w);
else if(x < w && y > h)
printf("%.0f\n", y - h);
else if(x < w && y < h) {
if(x <= w-x && x <= h-y && x <= y)
printf("%.0f\n", x);
if(w-x < x && w-x < h-y && w-x < y)
printf("%.0f\n", w-x);
if(h-y < x && h-y < w-x && h-y < y)
printf("%.0f\n", h-y);
if(y < x && y < w-x && y < h-y)
printf("%.0f\n", y);
}
}
int main() {
solve();
return 0;
}
항상 생각하지만,, 풀고나면 참 멍청하게 짰다 싶다
'백준 (C99) > 기본수학 2단계 (完)' 카테고리의 다른 글
백준 4153 : 직각삼각형 (0) | 2022.02.02 |
---|---|
백준 3009 : 네번째 점 (0) | 2022.02.01 |
백준 9020 : 골드바흐의 추측 (0) | 2022.02.01 |
백준 4948 : 베르트랑 공준 (0) | 2022.02.01 |
백준 11653 : 소인수분해 (0) | 2022.01.31 |
Comment