
(0, 0)에서 (X, Y)까지 이동할 때 최소 비용을 구하는 문제.
- 상하좌우 이동: 비용 W
- 대각선 이동: 비용 S (x, y 동시에 ±1)
세 가지 전략의 비용을 각각 계산해서 최솟값 선택
(X + Y) * Wmin(X,Y) * S + |X-Y| * W(X+Y)가 짝수면 대각선 방향을 바꿔가며 max(X,Y) 번에 도달 가능 → max(X,Y) * SW + (max(X,Y) - 1) * S(+1,+1) 뿐 아니라 (+1,-1) 방향도 가능 → X+Y 홀짝에 따라 대각선만으로 도달 가능 여부가 결정됨max(X,Y) 번에 정확히 도달import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int X = scanner.nextInt();
int Y = scanner.nextInt();
int W = scanner.nextInt();
int S = scanner.nextInt();
// 직선
long way_1 = (long) (X + Y) * W;
// 대각선 우선 + 직선
long way_2 = (long) Math.min(X, Y) * S + (long) Math.abs(X - Y) * W;
// 대각선 2개 +1, + 1 / +1, -1
// 각각 a, b번 이면 a+b = X, a-b = Y
long way_3;
if ((X + Y) % 2 == 0) way_3 = (long) Math.max(X, Y) * S; // 짝수
else way_3 = W + (long) (Math.max(X, Y) - 1) * S;
System.out.println(Math.min(Math.min(way_1, way_2), way_3));
scanner.close();
}
}
(+1,-1) 방향도 된다는 걸 처음엔 놓쳤다.(X+Y) % 2 홀짝 조건이 핵심인데, 이 조건을 못 잡으면 way_3 계산이 틀린 값이 나온다.long 캐스팅을 계속 했다. (처음부터 long으로 받지...)