728x90
반응형
https://www.acmicpc.net/problem/1069
1069번: 집으로
은진이는 지금 (X, Y)에 있고, (0, 0)에 있는 집으로 가능한 빨리 가려고 한다. 이동할 수 있는 방법은 다음 두 가지이다. 첫 번째 방법은 걷는것이다. 걸을 때는 1초에 1만큼 움직인다. 두 번째 방법
www.acmicpc.net
문제 해결
- 걸을 때 1초에 1만큼 움직인다. 이는 택시기하학으로 움직이는 것이 아니고 자유롭게 대각선이든 반경 1안에 모든 점으로 1초에 이동할 수 있다는 것이다.
- 점프도 마찬가지다. 일직선으로 할 수 있다는 뜻은 정확히 거리가 D인 지점까지 T초에 간다는 뜻이다.
- 따라서 현재 거리, 즉 (x,y)와 (0,0) 거리를 구한다.
- 현재 거리가 한 번에 뛰어서 갈 수 있는 거리보다 크거나 같을 수도 있고 더 작을 수도 있다.
- 현재 거리가 더 크거나 같다면 나올 수 있는 경우
- 최대한 도착지점 방향으로 일직선으로 많이 뛰어서 이동하고 남은거리 걷기
- 도착지점까지 뛰어서만 갈 수 있도록 한 번 뛸때마다 방향 살짝씩 돌려서 뛴다. 즉 일직선으로 뛸 때 보다 한 번 더 뛰어서 도착지점 도착하기
- 걸어서 도착하기
- 현재 거리가 더 작다면 나올 수 있는 경우
- 한번 오바해서 뛰고 남은거리 되돌아오면서 걷기
- 방향 조금씩 틀어서 2번 뛰기
- 걸어서 오기
- 문제를 처음에 바르게 이해하기 힘들 뿐더러 경우의 수를 나누는 경우도 쉽지 않았다.
- 구현은 어렵지 않으나 조금 두려운 문제
CODE
import sys
input = sys.stdin.readline
import math
x, y, d, t = map(int, input().split())
dist = math.sqrt(x**2+y**2)
if dist >= d:
answer = min(t*(dist//d)+dist%d, t*(dist//d+1),dist)
else:
answer = min(t+(d-dist), 2*t,dist)
print(answer)
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 10835 카드게임 (0) | 2023.12.13 |
---|---|
[python] 백준 13335 트럭 (0) | 2023.12.10 |
[python] 백준 1981 배열에서 이동 (0) | 2023.12.04 |
[python] 백준 30823 건공문자열 (3) | 2023.12.03 |
[python] 백준 2234 성곽 (2) | 2023.12.03 |
댓글