개발
백준 1459 본문
브론즈1 이길래 쉽게 풀줄알았더니 반례를 못찾아서 한참을 찾다가 결국 답코드 보고 케이스 찾음..ㅠ
1. 대각선으로 이동한다
- 직선 2회이동이 빠른경우
- 대각선이 빠른경우
2. 남은 직선을 이동한다.
- 대각선이 빠른경우 (여기서 2 * w < s 조건으로 생각을함..)
- 짝수인경우 대각선으로 이동 가능
- 1은 직선으로 간 뒤 나머지를 대각선으로 이동
- 직선이 빠른경우
2 * w < s 의 케이스는 대각선으로 이동하는 경우의 대소비교임..
직선의 경우 짝수는 대각선 2회로 이동하므로, 2 *w < s 로 할 경우,, 2,3으로 들어간다면 직선이 빠른데 3으로들어가게됨,,
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
long x = Integer.parseInt(st.nextToken());
long y = Integer.parseInt(st.nextToken());
long w = Integer.parseInt(st.nextToken());
long s = Integer.parseInt(st.nextToken());
long slide = Math.min(x,y); //대각선수
long linear = Math.max(x,y) - slide; //직선수
long second = 0; //이동시간
//대각선으로 이동한 수. 직선 or 대각선으로 작은 숫자로 이동 했음.
if(2 * w < s){
second = w * 2 * slide;
} else {
second = slide * s;
}
if (2 * s < 2 * w){
//대각선2번으로 직선을 이동할 수 있음
if(linear % 2 == 0){
second += linear * s;
} else if(linear % 2 == 1) {
second += w; //직선으로 한칸 가고나서
linear--; //직선 하나 줄이고
//나머지는 대각선을 이용해 간다.
second += linear * s;
}
//남은 직선을 이동하자.
} else {
second += linear * w;
}
System.out.println(second);
}
}
Comments