알고리즘/문제 풀이
[Java/자바 백준 1459] 걷기
광규니
2022. 3. 29. 18:22
반응형
풀이
그리디 문제인지만 모든 케이스를 다 고려해주었습니다.
헷갈릴 수 있는 상황
-> (0,0) (2,0) 가기
1. 직진해서 2W로 갈 수 있지만,
2. 0,0 -> 1,1 -> 2,0 이렇게도 갈 수 있습니다 지도가 무한히 크므로
다음 케이스별로 모든 조건을 비교해주어서 가장 작은 값을 출력시켰습니다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
long X, Y, W, S;
StringTokenizer st = new StringTokenizer(br.readLine());
X = Long.parseLong(st.nextToken());
Y = Long.parseLong(st.nextToken());
W = Long.parseLong(st.nextToken());
S = Long.parseLong(st.nextToken());
long min = Long.MAX_VALUE;
// 가로질러서 가지않고 일자로만 걷기
min = Math.min(min, W * (X + Y));
// 가로 지를만큼 지르고 따라서 걷기
min = Math.min(min, S * Math.min(X, Y) + W * (Math.abs(X - Y)));
long tmp;
if((X - Y) % 2 == 0) {
// 가로지르고 / \ 대각으로 가기
tmp = S * Math.min(X, Y) + S * Math.abs(X - Y);
}
else {
//대각으로 가다가 마지막만 일자로 가기
tmp = S * Math.min(X, Y) + S * (Math.abs(X - Y) - 1) + W;
}
min = Math.min(min, tmp);
System.out.println(min);
}
}
반응형