x, y 평면에 양의 좌표와 직사각형 집의 좌표가 주어졌을 때, 양이 집에 닿지 않도록 묶어 놓을 수 있는 최단 로프의 길이를 구하는 문제입니다.
양이 집의 가로 또는 세로 범위 안에 들어오는 경우와,
그렇지 않은 경우로 나누어 문제를 해결하였습니다.
전자의 경우, 집까지의 평면 거리를 구하면 되고,
후자의 경우, 집의 네 꼭짓점 중 가장 가까운 거리를 구하면 됩니다.
import math
def distance(x1, y1, x2, y2):
dis = math.sqrt((x2 - x1)**2 + (y2 - y1)**2)
return dis
def main():
x, y, x1, y1, x2, y2 = map(int, input().split())
if x >= x1 and x <= x2:
if y > y2:
ans = y - y2
else:
ans = y1 - y
ans = float(ans)
elif y >= y1 and y <= y2:
if x > x2:
ans = x - x2
else:
ans = x1 - x
ans = float(ans)
else:
ans = min(distance(x,y,x1,y1), distance(x,y,x2,y1), distance(x,y,x1,y2), distance(x,y,x2,y2))
print(f"{ans:.3f}")
if __name__ == "__main__":
main()
기하 문제를 코드로 해결하는 경우,
기하 문제 그대로 해석하여 해결하는 것보다
다른 방법을 찾는 것도 코드나 속도면에서 효율적일수 있을것으로 보입니다.
위의 경우는 기하 문제 그대로 접근했으나,
공식을 좀 더 고민하면 더 적은 수의 조건문으로 해결할 수도 있을 것 같습니다.