728x90
https://www.acmicpc.net/problem/1459
1459번: 걷기
세준이는 학교에서 집으로 가려고 한다. 도시의 크기는 무한대이고, 도시의 세로 도로는 모든 정수 x좌표마다 있고, 가로 도로는 모든 정수 y좌표마다 있다. 세준이는 현재 (0, 0)에 있다. 그리고 (
www.acmicpc.net
1. 도착 좌표의 x축 또는 y축을 만날 때까지 대각선 방향으로 올라갑니다.
- 대각선 방향 -> min(w * 2, s)
2. 남은 거리를 대각선으로만 이동한 거리와 한 블록씩으로만 이동한 거리를 구하여 가장 작은 값을 구합니다.
- 홀수라면 한 블록 더하고 구합니다.
import sys
x, y, w, s = map(int, sys.stdin.readline().strip().split())
ans = 0
# 질러서 가는 것이 더 빠른지 아닌지
up = min(w * 2, s)
# 대각선으로 도착지의 x 또는 y가 같아질 때까지 올라갑니다.
ans += up * min(x, y)
# x축 또는 y축에 도착했을 때 남은 거리
last = x - y if x - y >= 0 else (x - y) * -1
t1, t2 = 0, 0
# 도착지점까지 한 블록씩 움직였을 때
t1 = w * last
# 남은 거리가 홀수일 때 대각선으로만 갔을 때 시간
if last % 2 == 1:
t2 = w
t2 += s * (last - 1)
# 남은 거리가 짝수일 때 대각선으로만 갔을 때 시간
else:
t2 = s * last
print(ans + min(t1, t2))
728x90
'알고리즘' 카테고리의 다른 글
Python - 초콜릿 식사 (2885) 그리디 (0) | 2023.06.07 |
---|---|
Python - 2048 (Easy) (12100) 구현, 브루트포스 (0) | 2023.06.06 |
Python - 치즈 (2636) BFS (0) | 2023.06.03 |
Python - 거짓말 (1043) (0) | 2023.05.30 |
C++ - 테트로미노 (14500) DFS, BRUTE FORTE (0) | 2023.05.25 |