접근
처음에는 직선으로 하는 이동만 생각해서 d 로 뛸 수 있는 만큼 뛰고 남은 거리를 걷거나, 거기서 한번 더 뛰고 다시 뒤로 걷는 두가지 경우만 생각했지만, 한번 틀리고 다시 생각해보니 두가지를 놓쳤다는 것을 알 수 있었다.
- d 보다 짧은 거리를 이동할 때, 걷는 것보다 한번 꺾어서 두번 뛰는 것이 더 빠를 수 있다는 것
- 뛰는 것보다 걷는 것이 더 빠를 수도 있다는 것
두가지를 고려하여 다음과 같이 비교하여 문제를 해결할 수 있었다.
전체 거리가 d 보다 클 때,
- d로 뛸 수 있는 만큼 뛰고 남은 거리를 걷는 것
- d로 뛸 수 있는 만큼 뛰고 남은 거리를 꺾어서 두번에 뛰는 것
- 처음부터 끝까지 걷는 것
전체 거리가 d보다 작을 때,
- d로 목적지 방향으로 뛰고 다시 되돌아 걷는 것
- 꺾는 방향으로 두번 뛰는 것
- 처음부터 끝까지 걷는 것
코드
import sys
x, y, d, t = map(int, sys.stdin.readline().split())
distance = (x ** 2 + y ** 2) ** 0.5
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)
더 생각해 볼 것?
...
코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!
반응형
'코딩 > 백준 (Python)' 카테고리의 다른 글
백준 2098번: 외판원 순회 (Python) (0) | 2021.05.10 |
---|---|
백준 1311번: 할 일 정하기 1 (Python, PyPy3) (0) | 2021.05.10 |
백준 7869번: 두 원 (Python) (0) | 2021.05.07 |
백준 2162번: 선분 그룹 (Python, PyPy3) (0) | 2021.05.07 |
백준 20149번: 선분 교차 3 (Python) (0) | 2021.05.07 |
최근댓글