Updated:

1. 문제 풀이 방법

열차와 정류장 사이의 최단거리를 구하는 문제이다. 3가지 항목만 주의하면 문제를 어렵지 않게 풀 수 있다.

  1. 직선이 아니라 반직선
    • 열차는 한 방향으로만 움직이기 때문에 열차를 나타내는 반직선과 정류장 사이의 거리를 구해야한다.
  2. 뛰어내릴 좌표가 항상 정수
    • 단순히 반직선과 점 사이의 최단거리를 나타내는 좌표를 정수로 형변환하게 되면 문제에서 원하는 답이 아닐 수도 있다.
  3. dx가 0
    • dx가 0일 때 반직선의 기울기는 구할 수 없으므로 주의해야한다.

2. 풀이

import sys
def input(): return sys.stdin.readline().rstrip()

def func(x):
    grad = dy / dx
    return  grad * x - grad * x_e + y_e
def distance(x1,y1,x2,y2):
    return ((x1-x2) ** 2 + (y1-y2)**2)**(1/2)

x_s, y_s = map(int,input().split())
x_e, y_e, dx, dy = map(int,input().split())

min_d,x,y = distance(x_e,y_e,x_s,y_s),x_e,y_e
if dx > 0:
    for i in range(x_e,1001):
        if distance(i,func(i),x_s,y_s) < min_d:
            min_d = distance(i, int(func(i)),x_s,y_s)
            x,y = i, int(func(i))
elif dx < 0:
    for i in range(x_e,-1001,-1):
        if distance(i,func(i),x_s,y_s) < min_d:
            min_d = distance(i, int(func(i)),x_s,y_s)
            x,y = i, int(func(i))
elif dy > 0:
    for i in range(y_e,1001):
        if distance(x_e,i,x_s,y_s) < min_d:
            min_d = distance(x_e,i,x_s,y_s)
            x,y = x_e, i
else:
    for i in range(y_e,-1001,-1):
        if distance(x_e,i,x_s,y_s) < min_d:
            min_d = distance(x_e,i,x_s,y_s)
            x,y = x_e,i
print(x,y)

Leave a comment