<aside> 🌐
</aside>
병든 나이트가 N × M 크기 체스판의 가장 왼쪽아래 칸에 위치해 있다. 병든 나이트는 건강한 보통 체스의 나이트와 다르게 4가지로만 움직일 수 있다.
const move = [
(2, 1),
(1, 2),
(-1, 2),
(-2, 1)
];
따라서, 병든 나이트는 출발 이후로 왼쪽으로는 다시 가지 않습니다.
병든 나이트는 여행을 시작하려고 하고, 여행을 하면서 방문한 칸의 수를 최대로 하려고 한다. 병든 나이트의 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다. 이동 횟수가 4번보다 적은 경우(방문한 칸이 5개 미만)에는 이동 방법에 대한 제약이 없다.
병든 나이트의 이동 횟수가 4번보다 많아서 이동 방법을 모두 한 번씩 사용하려면 체스판의 가로 길이가 적어도 7 이상이어야 합니다.
체스판의 크기가 주어졌을 때, 병든 나이트가 여행에서 방문할 수 있는 칸의 최대 개수를 구해보자.
첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다.
100 50
1 1
17 5
병든 나이트가 여행에서 방문할 수 있는 칸의 개수중 최댓값을 출력한다.
48
1
4
방문한 칸을 세기 위해 count
변수를 선언해 줍니다.
let count = 0;
체스판의 세로 길이(N)이 1이면 세로 이동이 불가능하므로 이동할 수 없습니다. 따라서 병든 나이트는 시작 위치만 방문합니다.
if(N === 1){
count = 1
}
체스판의 세로 길이(N)이 2이면 1칸 위로, 2칸 오른쪽(1, 2)
혹은 1칸 아래로, 2칸 오른쪽(-1, 2)
으로만 이동할 수 있습니다.
이 때에는 체스판의 가로 길이(M)에 따라 오른쪽으로 갈 수 있는 만큼만 위, 아래로 이동하면서 움직일 수 있습니다. 2칸씩 이동하므로 가로 길이를 2로 나눈 만큼 이동할 수 있습니다.
문제에 따르면 4번 이상 이동하려면 모든 이동을 다 써야 하므로, 이 경우에는 모든 이동을 다 사용하지 못하니 딱 4번까지만 이동할 수 있습니다.
if(N === 2) {
count = Math.min(4, Math.ceil(M / 2))
}