생성 일시: 2022년 12월 11일 오후 9:52
태그: Java
키워드
세준이는 현재 (0, 0)에 있다. 그리고 (X, Y)에 위치한 집으로 가려고 한다.
세준이가 걸을 수 있는 방법은 두가지 인데,
하나는 도로를 따라서 가로나 세로로 한 블록 움직여서 이번 사거리에서 저 사거리로 움직이는 방법
블록을 대각선으로 가로지르는 방법이 있다.
구현
- 대각선 비용이 이득인 경우
- 대각선 이동 비용 < 가로세로 이동 비용 * 2
- 최대한 대각선으로 이동한다.
- 같은 선상에서 2칸 차이나면 대각선으로 이동하는 것이 더 이득이다.
- 대각선 이동 비용 < 가로세로 이동 비용
- 대각 → 대각 < 가로세로 → 가로세로
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class java_1459 {
// 목적지 x, y
static int x, y;
// 십자 이동 비용
static int crossCost;
// 대각선 이동 비용
static int diagonalCost;
static long solution() {
long result = 0;
// 둘 다 10억 이하이므로 더해도 문제 없음
int xy = x + y;
// 대각선 비용이 더 이득인 경우
if (diagonalCost < crossCost * 2) {
xy -= Math.min(x, y) * 2;
// 최대한 대각선으로 이동하기
result += (long) (Math.min(x, y)) * diagonalCost;
}
// 같은 선상에서 2칸 차이나면 대각선으로 이동한다.
if (diagonalCost < crossCost) {
result += (long) (xy / 2 * 2) * diagonalCost;
xy -= xy / 2 * 2;
}
result += (long) (xy) * crossCost;
return result;
}
public static void main(String[] args) throws IOException {
// 대각선을 가면 이득인 경우 -> 대각선 걸리는 시간 < 가로세로 걸리는 시간 * 2
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
x = Integer.parseInt(st.nextToken());
y = Integer.parseInt(st.nextToken());
crossCost = Integer.parseInt(st.nextToken());
diagonalCost = Integer.parseInt(st.nextToken());
long result = solution();
System.out.println(result);
br.close();
}
}
'Coding Test > BOJ' 카테고리의 다른 글
[BOJ/JAVA] 7662번: 이중 우선순위 큐 (0) | 2023.01.10 |
---|---|
[BOJ/JAVA] 1781번: 컵라면 (0) | 2023.01.10 |
[BOJ/JAVA] 21758번: 꿀 따기 (0) | 2022.12.11 |
[BOJ/JAVA] 2036번: 수열의 점수 (0) | 2022.12.11 |
[BOJ/JAVA] 1783번: 병든 나이트 (0) | 2022.12.11 |