규칙이 있는데
세로가 1일 때는 1
세로가 2일 때는 2번째(1칸 위로, 2칸 오른쪽), 3번째(1칸 아래로, 2칸 오른쪽) 밖에 사용하지 못한다.
그러므로, 이동 횟수가 최대 4이다. 오른쪽으로 2만큼이므로
min(4, m+1)
이 된다. (예를 들어, m이 3이면 이동할 수 있는 칸은 2번이다.)
세로가 3이상일 때는 가로의 길이 6보다 크다면 시작을 2, 3으로 하고 7번부터는 1번과 4번을 반복하여 한 칸씩 이동할 수 있다.
그래서 6보다 작거나 같은 경우는 아무리 많아도 도착하는 칸 수는 4개이다. (가로 길이가 4보다 크거나 같고 7보다 작으면 : 4, 4보다 작으면 가로길이 만큼 된다.)
import sys
read = sys.stdin.readline
n, m = map(int, read().split())
# 세로를 기준으로
# 세로가 1인경우면, 방문할 수 있는 칸의 개수가 1이다.
if n == 1:
print(1)
elif n == 2:
# 세로가 2인 경우 방문할 수 있는 칸의 개수는
# 4가지로 이동할 수 있는 경우의 수중, 2번과 3번만 사용가능하다. (최대 시작점 포함하여 최대 4개의 칸의 개수를 얻을 수 있다.)
# 1, 4번은 사용하지 못하여 아무리 가로가 길어도 2, 3번만 사용할 수 있어 한정되어 있다.
print(min(4, (m+1)//2))
else:
# 세로 길이가 3이상일 경우,
# 가로가 6이하라면, 최대 점의 개수는 min(4, 가로 길이이다.) 가로 7부터 이동횟수 4가지를 모두 실행할 수 있다.
if m <= 6:
print(min(4, m))
else:
# 가로가 7부터는 (1부터 시작하여 (2, 3), (1. 5), (3, 6), (2, 7), (3, 8), (2, 9) ~ 이동방법을 다 사용했을 경우 반복된다.
# 7인경우 총 지나가는 점들 개수 : 5개 (시작점 + 4가지로 이동할 수 있는 방향), 뒤 부터는 세로 2 가로 1 사용 (위 or 아래 오른쪽)
print(m - 2)
# 참고 : https://jaimemin.tistory.com/598
채점 결과