나올 수 있는 경우의 수를 분기를 두어 구해준다.
- 전체 거리가 d보다 클 때 나올 수 있는 경우의 수는 d로 최대한 뛸 수 있는 만큼 뛰고 나머지는 걷는 방법이 있고, d로 뛸 수 있는 만큼 뛰고 마지막 남은 거리에서 꺾어서 두 번 뛰는 방법이 있고 마지막으로는 처음부터 끝까지 걷는 방법이 있다.
- 만약 전체 거리가 d보다 작을 때에는 d로 목적지 방향으로 뛰고 원점 방향으로 걷는 방법이 있고, 해당 위치에서 방향을 꺾어서 두 번 뛸 수 있고, 그냥 걷는 방법이 있다.
- 위의 경우의 수들 중 최소값을 출력해주면 된다.
import sys, math
input = sys.stdin.readline
x, y, d, t = map(int,input().split())
distance = math.sqrt(x**2 + y**2)
if distance >= d :
ans = min(t*(distance//d) + distance%d, t*(distance//d + 1), distance)
else :
ans = min(t + (d-distance), 2*t, distance)
print(ans)