[BOJ] 1069번 집으로 - Python

"기하"

Posted by Yongmin on October 2, 2021

문제

집으로

풀이

가장 짧은 루트인 원점에서 그 점까지의 length를 기준으로 생각한다.
점프를 할 수 있는 경우의 수들을 나눠 생각하는데, 다 걸어서 가는 경우, 최대 점프 횟수로 간다음 나머지를 걸어 가는 경우, 최대 점프 횟수+1로 간다음 넘은 거리만큼 다시 돌아오는 경우, 점프 최대 횟수 + 1로 가는 경우, 총 4가지를 고려하여 가장 작은 값을 정답으로 도출해낸다.

소스 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import sys
from math import *

x, y, d, t = map(int, input().split())

## L>D
# 다 걸어서 가는 경우(L)
# int(L/D)만큼 간다음 나머지 걸어 가는 경우(int(L/D)*T + L-(int(L/D)))
# int(L/D) + 1 만큼 간다음 돌아오는 경우 (int(L/D)+1 * T + ...)
# 점프 최대횟수 + 1


## L<=D
# 다 걸어서 가는 경우(L)
# D만큼 간다음 나머지 다시 돌아가는 경우
# 점프 두번하기

l = sqrt(x**2 + y**2)


if(l>=d):    
    jump = int(l/d) # 점프한 횟수
    result1 = l
    result2 = jump*t + (l-jump*d)
    result3 = (jump+1)*t + ((jump+1)*d - l)
    result4 = (jump+1)*t

    print(min(result1, result2, result4))


else:
    result1 = l
    result2 = t + (d - l)
    result3 = 2*t
    print(min(result1, result2, result3))
   


# # #