백준 1085 : 직사각형에서 탈출

구역을 네가지로 나눠야 한다

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