https://www.acmicpc.net/problem/1459
1459번: 걷기
세준이는 학교에서 집으로 가려고 한다. 도시의 크기는 무한대이고, 도시의 세로 도로는 모든 정수 x좌표마다 있고, 가로 도로는 모든 정수 y좌표마다 있다. 세준이는 현재 (0, 0)에 있다. 그리고 (
www.acmicpc.net
'''
대각선/직선 함수 따로 만들기
재귀로 가지치기
대각선을 몇번 이용했는지
대각선 0회 (end_i + end_j) * s
대각선 n회 (end_i-n + end_j-n) * s + (n * d) -> 가 최소가 되려면?!
대각선 이동 (1,1) (1,-1) -> w시간
직선 이동 (0,1) (1,0) -> s시간
(0,0)에서 (end_i,end_j)까지 이동
'''
end_i, end_j, s, d = map(int, input().split())
min_res = 99999999999999999999999999999
n = 0
small = 0
if end_i >= end_j:
small = end_j
else:
small = end_i
while True:
if n == small:
if min_res > abs(end_i - end_j) * s + (n * d):
min_res = abs(end_i - end_j) * s + (n * d)
break
res = (end_i - n + end_j - n) * s + (n * d)
if min_res > res:
min_res = res
n += 1
print(min_res)
# def df(i, j):
# global res, min_res
#
# if i + 1 == end_i and j + 1 == end_j:
# if min_res >= res:
# min_res = res
# return
# else:
#
#
# def sf(i, j):
# global res, min_res
# if i == end_i and j == end_j:
# if min_res >= res:
# min_res = res
# return
#
# for di, dj in [(1,0),(0,1)]:
# if i+di == end_i and j+dj == end_j:
# if min_res >= res:
# min_res = res
# return
# else:
# sf(i+di,j+dj)
# res += s
'백준' 카테고리의 다른 글
백준 1459. 걷기 (0) | 2023.10.19 |
---|---|
백준 20188. 등산마니아 (0) | 2023.10.18 |
백준 2195. 문자열 복사 (0) | 2023.10.10 |
백준 14503. 로봇 청소기 (0) | 2023.09.22 |
백준 9205. 맥주 마시면서 걸어가기 (0) | 2023.09.21 |