병든 나이트가 N × M 크기 체스판의 가장 왼쪽아래 칸에 위치해 있다. 병든 나이트는 건강한 보통 체스의 나이트와 다르게 4가지로만 움직일 수 있다.
병든 나이트는 여행을 시작하려고 하고, 여행을 하면서 방문한 칸의 수를 최대로 하려고 한다. 병든 나이트의 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다. 이동 횟수가 4번보다 적은 경우(방문한 칸이 5개 미만)에는 이동 방법에 대한 제약이 없다.
체스판의 크기가 주어졌을 때, 병든 나이트가 여행에서 방문할 수 있는 칸의 최대 개수를 구해보자.
첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다.
병든 나이트가 여행에서 방문할 수 있는 칸의 개수중 최댓값을 출력한다.
import java.util.*;
import java.io.*;
public class Main{
static int x = 1;
static int y = 1;
public static void main(String [] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
final int HEIGHT = Integer.parseInt(st.nextToken());
final int WIDTH = Integer.parseInt(st.nextToken());
int answer = 1;
do{
//초기 4수 행마
if(HEIGHT <= 1) break;
if(HEIGHT <= 2) {
if(WIDTH <= 2) {
break;
}
while(x + 2 <= WIDTH) {
x+=2;
answer++;
if(answer == 4) {
break;
}
}
}else {
switch(WIDTH){
case 1:
case 2:
case 3:
case 4:
answer = WIDTH;
break;
case 5:
answer = 4;
break;
default:
answer = WIDTH -2;
break;
}
}
}while(false);
sb.append(answer);
sb.append("\n");
bw.write(sb.toString());
bw.flush();
br.close();
bw.close();
}
}