백준 :: 선분과 점 <11664번>

혜 콩·2022년 7월 7일
0

알고리즘

목록 보기
31/61

> 문제 <

https://www.acmicpc.net/problem/11664

> 풀이 <

> 코드 <

# mine

import sys

ax, ay, az, bx, by, bz, cx, cy, cz = map(int, sys.stdin.readline().split())


def calculate(x1, y1, z1, x2, y2, z2):                              # 두 점 사이의 거리 계산
    return ((x2-x1)**2 + (y2-y1)**2 + (z2-z1)**2) ** (1/2)


minlen = 1e9
lenSC = calculate(ax, ay, az, cx, cy, cz)
lenEC = calculate(bx, by, bz, cx, cy, cz)

while 1:
    mx = (ax + bx) / 2
    my = (ay + by) / 2
    mz = (az + bz) / 2
    lenKC = calculate(mx, my, mz, cx, cy, cz)           # mid(임의의 점)과 C 사이의 거리
    if abs(minlen - lenKC) <= 1e-6:
        print('{:.10f}'.format(lenKC))
        break
    minlen = min(lenKC, minlen)
    if lenSC < lenEC:              						# [시작점과 C 사이의 거리]가 [끝점과 C 사이의 거리]보다 작을때, 끝점을 시작점쪽으로 당기기
        bx, by, bz = mx, my, mz
        lenEC = lenKC
    else:
        ax, ay, az = mx, my, mz
        lenSC = lenKC
profile
배우고 싶은게 많은 개발자📚

0개의 댓글