Archive/BOJ

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

Danna 다나 2021. 2. 6. 18:14
728x90
반응형

www.acmicpc.net/problem/1085

 

1085번: 직사각형에서 탈출

한수는 지금 (x, y)에 있다. 직사각형의 왼쪽 아래 꼭짓점은 (0, 0)에 있고, 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오.

www.acmicpc.net

 

구현 언어: 파이썬


x, y, w, h = map(int, input().split())
answer = 0

# 사각형의 세로 2등분 중 왼쪽
if x <= w/2:
    if x >= 0 and y >= h:
        answer = y - h
    elif x >= 0 and y <= 0:
        answer = abs(y)
    elif x <= 0 and (y >= 0 and y <= h):
        answer = abs(x)
    elif x >= 0 and (y >= 0 and y <= h):
        if y <= h/2:
            answer = min(abs(x), abs(y))
        else:
            answer = min(abs(x), abs(h-y))
    else:
        if y > 0:
            answer = pow(x ** 2 + (y-h) ** 2 ,1/2)
        else:
            answer = pow(x ** 2 + y ** 2, 1/2)

# 사각형의 세로 2등분 중 오른쪽
else:
    if x <= w and y >= h:
        answer = y - h
    elif x <= w and y <= 0:
        answer = abs(y)
    elif x >= w and (y >= 0 and y <= h):
        answer = abs(x - w)
    elif x >= w/2 and (y >= 0 and y <= h):
        if y <= h/2:
            answer = min(abs(w - x), abs(y))
        else:
            answer = min(abs(w - x), abs(h - y))
    else:
        if y > 0:
            answer = pow((x-w) ** 2 + (y-h) ** 2, 1/2)
        else:
            answer = pow((x-w) ** 2 + y ** 2, 1/2)

print(answer)

시도 횟수: 1

구현 포인트:

케이스를 잘 나눠보면서 하면 된다 ..

조금만 더 보면 코드 더 깔끔하게 짤 수 있을 거 같은데 나중에 해야지 ㅎㅎ

728x90
반응형