출처
https://www.acmicpc.net/problem/1783
문제
위의 규칙을 만족하면서 움직일 수 있는 최대 값을 구하는 문제이다.
접근 방법
이 문제 처음 해석하는데에 난항을 겪었지만, 조건을 잘 짜주는 문제였다.
- n == 1인 경우, 나이트는 절대 움직일 수 없다. 방문 횟수는 1이다.
- n == 2인 경우, 2번과 3번의 규칙을 사용하여 움직 일 수 있지만, 아무리 가로가 길어도 제약 조건에 따라 4번이 최대이다. 그래서 4번과 (m+1)//2 중 최솟값이 정답이다.
- n은 3 이상이지만 m이 6 이하인 경우 : 이 경우는 4번의 규칙을 모두 사용하여 움직였을때 최대 값이 4이고, 최소값은 가로의 길이가 될 것이다.
- 이외 더 큰 경우, 최초 한번씩 2번3번 규칙을 사용하여 2칸씩 건너뛴 경우 한번씩을 제외하고는 가로의 길이가 정답이다. 결국 m-2가 되는것이다.
풀이
n, m = map(int, input().split())
if n == 1:
print(1)
if n == 2:
print(min(4, (m+1)//2))
if m <= 6:
print(min(4, m))
else:
print(m-2)