본문 바로가기

두두의 알고리즘/문제

[기타] 백준 1459번 '걷기' (Python)

728x90

<문제 링크>

https://www.acmicpc.net/problem/1459

 

1459번: 걷기

세준이는 학교에서 집으로 가려고 한다. 도시의 크기는 무한대이고, 도시의 세로 도로는 모든 정수 x좌표마다 있고, 가로 도로는 모든 정수 y좌표마다 있다. 세준이는 현재 (0, 0)에 있다. 그리고 (

www.acmicpc.net


<문제 풀이>

  • 한 블록의 2배 값이 대각선보다 작으면 최종 목적지(x+y) * 한 블록
  • 대각선이 더 빠르다면, 
    • x와 y의 차가 짝수라면, {대각선*(x, y 중 작은 값)} + {(한 블록, 대각선 중 작은 값)*(x, y 차)}
    • 홀수라면,  {대각선*(x,y 중 작은 값)} + {(한 블록, 대각선 중 작은 값)*((x, y 차)-1)+한 블록}

<코드>

'''입력예제
4 2 3 10

4 2 3 5

2 0 12 10

25 18 7 11

24 16 12 10

10000000 50000000 800 901

135 122 43 29
'''

x,y,w,s = map(int,input().split())

if (w*2)<s:
    print((x+y)*w)
else:
    if abs(x-y)%2==0:
        print((s*min(x,y))+min(w,s)*abs(x-y))
    else:
        print((s*min(x,y))+(min(w,s)*(abs(x-y)-1)+w))

 

<고쳐야 할 점>

  • (0,0)에서 (2,2)로 갈 때, 대각선 2번과 한 블록 2번은 같이 도착할 수 있으므로, 둘 중 더 작은 값으로 계산해야 함