[Python] 백준 문제풀이 - 16410번

이형래·2022년 7월 24일
0

백준문제풀이

목록 보기
29/36

백준 문제풀이 - 16410 번


링크 -> https://www.acmicpc.net/problem/16410


1. 요약 및 풀이방법

x, y 평면에 양의 좌표와 직사각형 집의 좌표가 주어졌을 때, 양이 집에 닿지 않도록 묶어 놓을 수 있는 최단 로프의 길이를 구하는 문제입니다.

양이 집의 가로 또는 세로 범위 안에 들어오는 경우와,
그렇지 않은 경우로 나누어 문제를 해결하였습니다.

전자의 경우, 집까지의 평면 거리를 구하면 되고,
후자의 경우, 집의 네 꼭짓점 중 가장 가까운 거리를 구하면 됩니다.


2. Code

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()

3. 학습 내용

기하 문제를 코드로 해결하는 경우,
기하 문제 그대로 해석하여 해결하는 것보다
다른 방법을 찾는 것도 코드나 속도면에서 효율적일수 있을것으로 보입니다.

위의 경우는 기하 문제 그대로 접근했으나,
공식을 좀 더 고민하면 더 적은 수의 조건문으로 해결할 수도 있을 것 같습니다.


4. 결과

profile
머신러닝을 공부하고 있습니다. 특히 비전 분야에 관심이 많습니다.

0개의 댓글