🔗 병든 나이트
체스판의 크기가 N x M일 때, 병든 나이트는 일반 나이트처럼 이동할 수 없고, 아래의 4가지 방식으로만 움직일 수 있다:
나이트는 가장 많이 방문할 수 있는 칸의 수를 구해야 한다.
(현재 서 있는 칸도 방문한 것으로 친다.)
N, M이 주어진다.1 ≤ N ≤ 20,000, 1 ≤ M ≤ 20,000)이 문제는 이동 방향이 오른쪽으로만 고정되어 있기 때문에,
실제로는 세로(N)의 크기에 따라 경우를 나눠서 그리디하게 접근해야 한다.
N == 1정답: 1
정답: min(4, (M + 1) / 2)
정답:
- if M < 7 → min(4, M)
- else → M - 2
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int result = 0;
if (N == 1) {
result = 1;
} else if (N == 2) {
result = Math.min(4, (M + 1) / 2);
} else {
if (M < 7) {
result = Math.min(4, M);
} else {
result = M - 2;
}
}
System.out.println(result);
}
}